sql >> Database >  >> RDS >> Oracle

Oracle (+) outer join en constante waarden

Ik ga dit uitleggen aan de hand van een equivalente "ANSI JOIN"-syntaxis:

Optie 1

SELECT *
FROM TXN
LEFT JOIN CHK 
  ON TXN.CHK_ID = CHK.CHK_ID
WHERE TXN.CURRENT = 'Y'
AND CHK.CURRENT = 'Y'

Optie 2

SELECT *
FROM TXN
LEFT JOIN CHK 
  ON TXN.CHK_ID = CHK.CHK_ID 
  AND CHK.CURRENT = 'Y'
WHERE TXN.CURRENT = 'Y'

Zoals u kunt zien, worden in optie 1 uw constante predikaten toegepast na de LEFT JOIN tabeluitdrukking is opgegeven, d.w.z. op het resultaat van de LEFT JOIN .

In optie 2 maakt een van uw constante predikaten deel uit van de LEFT JOIN uitdrukking.

Hoe werkt LEFT JOIN werk?

Het idee van een LEFT JOIN is dat het alle rijen van LINKS . teruggeeft kant van de JOIN expressie, ongeacht of er een overeenkomende rij aan de andere kant is, gegeven het join-predikaat. Dus in optie 2, ongeacht of u een rij vindt in CHK met CURRENT = 'Y' voor een rij in TXN , de rij in TXN wordt nog teruggestuurd. Dit is waarom je meer rijen krijgt in optie 2.

Dit voorbeeld zou ook moeten uitleggen waarom u de voorkeur zou moeten geven aan de syntaxis "ANSI JOIN". Vanuit het oogpunt van onderhoud / leesbaarheid is het veel duidelijker wat uw vraag doet.



  1. Databaseproxy-failovertijden vergelijken - ProxySQL, MaxScale en HAProxy

  2. tsvector ondersteunt alleen Engels?

  3. Cartesiaanse producten en selecteert in de van-clausule

  4. Kan provider niet initialiseren. Ontbrekend of onjuist schema. voor MySql.Web-connector