Oracle
 sql >> Database >  >> RDS >> Oracle

unisci condizione ON vs in DOVE

Bene, ciò che chiami "equivalente" non è un equivalente per gli outer join. Prendiamo ad esempio il join sinistro.

Condizione in UNISCITI:

SELECT * FROM Customers c
LEFT JOIN CustomerAccounts ca ON ca.CustomerID = c.CustomerID AND c.State = 'NY'
LEFT JOIN Accounts a ON ca.AccountID = a.AccountID AND a.Status = 1

vs DOVE:

SELECT * FROM Customers c
LEFT JOIN CustomerAccounts ca ON ca.CustomerID = c.CustomerID
LEFT JOIN Accounts a ON ca.AccountID = a.AccountID
WHERE c.State = 'NY'
AND a.Status = 1

Mettere le condizioni nella clausola WHERE rende effettivamente i join INNER join, perché la clausola WHERE è un filtro di riga che viene applicato dopo i join sono stati effettuati.