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

Oracle (+) ydre sammenføjning og konstante værdier

Jeg vil forklare dette ved at bruge tilsvarende "ANSI JOIN"-syntaks:

Mulighed 1

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

Mulighed 2

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

Som du kan se, i mulighed 1, anvendes dine konstante prædikater efter LEFT JOIN tabeludtryk er angivet, dvs. på resultatet af LEFT JOIN .

I mulighed 2 er et af dine konstante prædikater en del af LEFT JOIN udtryk.

Hvordan gør LEFT JOIN arbejde?

Ideen med en LEFT JOIN er, at det vil returnere alle rækker fra VENSTRE siden af ​​JOIN udtryk, uanset om der er en matchende række på den anden side, givet join-prædikatet. Så i mulighed 2, uanset om du finder en række i CHK med CURRENT = 'Y' for en række i TXN , rækken i TXN er stadig returneret. Det er derfor, du får flere rækker i mulighed 2.

Dette eksempel skulle også forklare, hvorfor du bør foretrække "ANSI JOIN"-syntaksen. Fra et vedligeholdelses-/læsbarhedsperspektiv er det meget mere klart, hvad din forespørgsel gør.



  1. Hvordan beregner man ting ud fra mange tabeller ved at bruge nogle få forespørgsler?

  2. Standard numeriske formatstrenge understøttet af FORMAT() i SQL Server

  3. SQL-sætning ignorerer parameteren where

  4. Hvad er E før en Postgres-streng?