Строки SQL исчезают при добавлении соединения - PullRequest
2 голосов
/ 23 февраля 2011
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)

Соединение tblusers приводит к исчезновению строк, когда tblArtworkTemplates.editPingUserID имеет значение null.Я использую неправильный тип соединения?

Ответы [ 3 ]

3 голосов
/ 23 февраля 2011

Возможно, попробуйте левое внешнее соединение .. Или Правое внешнее соединение ..

Википедия для получения информации о присоединении

2 голосов
/ 23 февраля 2011

Попробуйте, ваше объединение было неверным.

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)
1 голос
/ 23 февраля 2011

Зависит от того, что вы ищете.

Если вам всегда нужны записи от tblUsers, но данные из Template + Specification только там, где доступны данные из обоих (другими словами, если у Template нет спецификаций, вас не волнует Template ) , используйте это

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

Если вам всегда нужны записи от tblUsers, но данные из Template, если они доступны, а затем из Specification, если они доступны (другими словами, если шаблон доступен без спецификации, в любом случае получите данные из записи Template) , затем используйте это

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...