Два SQL-запроса, приведенные ниже, должны дать мне точно такой же результат, но по какой-то причине первый запрос, который использует соединение вместо подзапроса, дает мне гораздо больше результатов. Единственное отличие - последняя строка в обоих выборках. Может ли кто-нибудь сказать мне, почему?SQL-запросы должны делать то же самое, но не
SELECT *
FROM TravelReport TR
JOIN School SC ON SC.SchoolId = TR.SchoolId
LEFT OUTER JOIN [User] U ON U.UserId = TR.UserId
AND U.UserTypeId = 3
AND U.UserStatusId = 1
JOIN ProjectSchools PS ON PS.SchoolId = SC.SchoolId
WHERE PS.Active = 1
AND PS.ProjectId = 2
=====
SELECT *
FROM TravelReport TR
JOIN School SC ON SC.SchoolId = TR.SchoolId
LEFT OUTER JOIN [User] U ON U.UserId = TR.UserId
AND U.UserTypeId = 3
AND U.UserStatusId = 1
WHERE SC.SchoolId in (SELECT DISTINCT PS.SchoolId FROM ProjectSchools PS
WHERE PS.Active = 1 AND PS.ProjectId = 2)
Единственный способ эти 2 запросы будут давать те же результаты, как если 'SchoolId' является уникальным в' ProjectSchools 'table, и, очевидно, это неверно в вашем сценарии – Lamak
Просто побочное замечание: не используйте предложения DISTINCT on IN. Оставьте это в СУБД, чтобы решить, как искать значения в списке. Он может или не может принять решение использовать отдельные в списке в первую очередь. –