Условие на главном столе во внутреннем соединении против предложения where - PullRequest
0 голосов
/ 07 мая 2018

Есть ли причина для INNER JOIN иметь условие для главной таблицы по сравнению с предложением WHERE?

Пример в INNER JOIN:

SELECT 
   (various columns here from each table)
FROM dbo.MainTable AS m
INNER JOIN dbo.JohnDataRecord AS jdr
    ON m.ibID = jdr.ibID
    AND m.MainID = @MainId -- question here
    AND jdr.SentDate IS NULL
LEFT JOIN dbo.PTable AS p1
    ON jdr.RecordID = p1.RecordID
LEFT JOIN dbo.DataRecipient AS dr
    ON jdr.RecipientID = dr.RecipientID
(more left joins here)
WHERE
    dr.lastRecordID IS NOT NULL;

Запрос с условием в WHERE предложении:

SELECT 
   (various columns here from each table)
FROM dbo.MainTable AS m
INNER JOIN dbo.JohnDataRecord AS jdr
    ON m.ibID = jdr.ibID
    AND jdr.SentDate IS NULL
LEFT JOIN dbo.PTable AS p1
    ON jdr.RecordID = p1.RecordID
LEFT JOIN dbo.DataRecipient AS dr
    ON jdr.RecipientID = dr.RecipientID
(more left joins here)
WHERE
    m.MainID = @MainId -- question here
    AND dr.lastRecordID IS NOT NULL;

Разница в других подобных вопросах, которые являются более общими, в то время как это характерно для SQL Server.

1 Ответ

0 голосов
/ 10 мая 2018

В рамках вопроса

Есть ли какая-либо причина для ВНУТРЕННЕГО СОЕДИНЕНИЯ иметь условие на главной таблица против предложения WHERE?

Это выбор СТИЛЯ для ВНУТРЕННЕГО СОЕДИНЕНИЯ.


С точки зрения чистого стиля:

Хотя для STYLE не существует жесткого и быстрого правила, обычно отмечается, что это менее часто используемый стиль. Например, это может привести к более сложному обслуживанию, например, если кто-то удалит условия INNER JOIN и все последующие условия предложения ON, это повлияет на набор результатов первичной таблицы, ИЛИ затруднит отладку / понимание запроса. когда это очень сложный набор соединений.

Можно также отметить, что эта строка может быть размещена на многих ВНУТРЕННИХ СОЕДИНЕНИЯХ, что еще больше увеличивает путаницу.

...