2011-02-23 40 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