Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle (+) външно съединение и константни стойности

Ще обясня това, като използвам еквивалентен синтаксис „ANSI JOIN“:

Вариант 1

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

Вариант 2

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

Както можете да видите, в опция 1 вашите постоянни предикати се прилагат след LEFT JOIN в резултата от LEFT JOIN .

В опция 2 един от вашите постоянни предикати е част от LEFT JOIN израз.

Как работи LEFT JOIN работа?

Идеята за LEFT JOIN е, че ще върне всички редове от НАЛЯВО страна на JOIN израз, независимо дали има съвпадащ ред от другата страна, като се има предвид предикатът за свързване. И така, в опция 2, независимо дали намерите ред в CHK с CURRENT = 'Y' за ред в TXN , редът в TXN все още се връща. Ето защо получавате повече редове в опция 2.

Освен това този пример трябва да обясни защо трябва да предпочетете синтаксиса "ANSI JOIN". От гледна точка на поддръжка/четимост е много по-ясно какво прави вашата заявка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на грешка при изпълнение на пакета

  2. Създайте отново Oracle Databse от .dbf файлове след повторно инсталиране на Oracle Enterprise 11gR2

  3. Мога ли да инсталирам JDK 1.6 върху JDK 1.3 по подразбиране на базата данни на Oracle?

  4. Връща променлива на курсора на съхранена процедура в cx_oracle

  5. Актуализирайте табличния формуляр на Apex с PLSQL