Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist ein „ODER“ in einer INNER JOIN-Bedingung eine schlechte Idee?

Diese Art von JOIN ist nicht auf einen HASH JOIN optimierbar oder ein MERGE JOIN .

Es kann als Verkettung von zwei Ergebnismengen ausgedrückt werden:

SELECT  *
FROM    maintable m
JOIN    othertable o
ON      o.parentId = m.id
UNION
SELECT  *
FROM    maintable m
JOIN    othertable o
ON      o.id = m.parentId

, wobei jeder von ihnen ein Equijoin ist, jedoch SQL Server Der Optimierer von ist nicht intelligent genug, um es in der von Ihnen geschriebenen Abfrage zu sehen (obwohl sie logisch äquivalent sind).