Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Avere un "OR" in una condizione INNER JOIN è una cattiva idea?

Questo tipo di JOIN non è ottimizzabile per un HASH JOIN o un MERGE JOIN .

Può essere espresso come una concatenazione di due set di risultati:

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

, ognuno dei quali è un equijoin, tuttavia, SQL Server L'ottimizzatore non è abbastanza intelligente da vederlo nella query che hai scritto (sebbene siano logicamente equivalenti).