Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle (+) sprzężenie zewnętrzne i wartości stałe

Wyjaśnię to za pomocą równoważnej składni „ANSI JOIN”:

Opcja 1

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

Opcja 2

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

Jak widać, w opcji 1 predykaty stałe są stosowane po LEFT JOIN określone jest wyrażenie tabeli, tj. w wyniku LEFT JOIN .

W opcji 2 jeden z predykatów stałych jest częścią LEFT JOIN wyrażenie.

Jak LEFT JOIN pracować?

Pomysł LEFT JOIN jest to, że zwróci wszystkie wiersze z LEWO strona JOIN wyrażenie, niezależnie od tego, czy po drugiej stronie znajduje się pasujący wiersz, biorąc pod uwagę predykat złączenia. Tak więc w opcji 2, niezależnie od tego, czy znajdziesz wiersz w CHK z CURRENT = 'Y' dla wiersza w TXN , wiersz w TXN jest nadal zwracany. Dlatego masz więcej wierszy w opcji 2.

Ten przykład powinien również wyjaśnić, dlaczego powinieneś preferować składnię „ANSI JOIN”. Z perspektywy konserwacji / czytelności jest znacznie bardziej jasne, co robi Twoje zapytanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00937:Nie jest to funkcja pojedynczej grupy — błąd zapytania

  2. Samouczek dotyczący formularzy i raportów Oracle 9i, Oracle 10g i Oracle 11g Developer Suite

  3. ORA-22813:wartość operandu przekracza limity systemowe

  4. Obetnij pole daty w mysql, takie jak Oracle

  5. Problem z budowaniem cx_Oracle - libclntsh.so.11.1 => nie znaleziono