2011-02-23 44 views
2
SELECT  tblArtworkTemplates.ID, tblArtworkTemplates.dateCreated, tblSpecifications.TxtPagination, tblSpecifications.FlatSizeW AS width, 
         tblSpecifications.FlatSizeL AS length, tblSpecifications.FlatSizeUOM AS uom, 
          (SELECT  COUNT(1) AS Expr1 
          FROM   tblArtworkUploads 
          WHERE  (templateID = tblArtworkTemplates.ID)) AS uploadCount, 
          (SELECT  COUNT(1) AS talks 
          FROM   tblArtworkTemplateMessages 
          WHERE  (templateID = tblArtworkTemplates.ID)) AS talkCount, tblArtworkTemplates.lastEditPing, tblUsers.userName AS Expr1 
FROM   tblUsers INNER JOIN 
         tblArtworkTemplates INNER JOIN 
         tblSpecifications ON tblArtworkTemplates.specID = tblSpecifications.id ON tblUsers.id = tblArtworkTemplates.editPingUserID 
WHERE  (tblArtworkTemplates.userID = 70) 

当tblArtworkTemplates.editPingUserID为空时,tblusers连接正在导致行消失。我是否使用错误的连接类型?添加连接时SQL行消失

回答

3

也许尝试左外连接..或右外连接..

Wikipedia的信息有关加入

+0

谢谢,右外连接的作品。这些东西总是让我困惑。 – 2011-02-23 10:41:29

2

试试这个,您的加入是错误的。

SELECT  tblArtworkTemplates.ID, tblArtworkTemplates.dateCreated, tblSpecifications.TxtPagination, tblSpecifications.FlatSizeW AS width, 
         tblSpecifications.FlatSizeL AS length, tblSpecifications.FlatSizeUOM AS uom, 
          (SELECT  COUNT(1) AS Expr1 
          FROM   tblArtworkUploads 
          WHERE  (templateID = tblArtworkTemplates.ID)) AS uploadCount, 
          (SELECT  COUNT(1) AS talks 
          FROM   tblArtworkTemplateMessages 
          WHERE  (templateID = tblArtworkTemplates.ID)) AS talkCount, tblArtworkTemplates.lastEditPing, tblUsers.userName AS Expr1 
FROM tblUsers u 
    INNER JOIN tblArtworkTemplates a ON u.id = a.editPingUserID 
    INNER JOIN tblSpecifications s ON a.specID = s.id ON 
WHERE  (a.userID = 70) 
+0

如果在双连接之后引用double-on子句,则连接并非“错误”。它的工作原理和有效的语法 – RichardTheKiwi 2011-02-23 10:44:10

1

这取决于你在做什么。

如果您总是需要来自tblUsers的记录,但是仅当数据来自(换句话说,如果模板没有规范,您不关心模板)的Template + Specification中的数据,,使用此

FROM tblUsers 
LEFT JOIN 
     tblArtworkTemplates 
     INNER JOIN tblSpecifications 
      ON tblArtworkTemplates.specID = tblSpecifications.id 
    ON tblUsers.id = tblArtworkTemplates.editPingUserID 

如果你总是想从向tblUsers记录,但数据从模板(如果有),然后从规格如有(换句话说,如果模板是可用的无说明书,获取数据从模板记录反正),然后用这个

FROM tblUsers 
LEFT JOIN 
     tblArtworkTemplates 
     LEFT JOIN tblSpecifications 
      ON tblArtworkTemplates.specID = tblSpecifications.id 
    ON tblUsers.id = tblArtworkTemplates.editPingUserID 

或更常见的书面(因为2左联接是可交换)

FROM tblUsers 
LEFT JOIN tblArtworkTemplates 
    ON tblUsers.id = tblArtworkTemplates.editPingUserID 
LEFT JOIN tblSpecifications 
    ON tblArtworkTemplates.specID = tblSpecifications.id