0
下面的兩個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獨特'表格,很明顯,在你的場景中不是這樣的 – Lamak
只是一面的說法:不要在IN子句中使用DISTINCT。將它留給DBMS來決定如何查找列表中的值。它可能會或可能不會決定首先在列表上使用不同的列表。 –