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

Oracle — lewe sprzężenie zewnętrzne z klauzulą ​​where

Twoje wyjaśnienie nie jest skorelowane z zapytaniem. Wspomniałeś

"Jednak muszę również dołączyć klauzulę where, ale.... Nadal chcę, aby wiersz z tabeli po lewej stronie był zwracany dla każdego rekordu w tabeli po lewej stronie, nawet jeśli warunek w klauzuli WHERE jest nie spełnione. "

Uważam więc, że Twoje zapytanie wygląda mniej więcej tak

SELECT a.*, 
       b.* 
FROM   a 
       LEFT OUTER JOIN b 
                    ON a.vin = b.vin 
WHERE  Trunc(a.rep_open_date) BETWEEN Trunc(b.check_in_date) + 1 AND 
                                      Trunc(b.check_in_date) - 1 

W powyższym LEFT OUTER JOIN zostanie przekonwertowany na INNER JOIN ze względu na filtrację właściwej tabeli w Where klauzula

Tak jak użyłeś w pierwszym zapytaniu, odpowiednie filtry tabeli powinny być częścią JOIN warunek, który zwróci wiersze z LEWEJ tabeli, nawet jeśli nie ma pasujących rekordów w PRAWEJ tabeli.

SELECT a.*, 
       b.* 
FROM   a 
       left outer join b 
                    ON a.vin = b.vin 
                       AND Trunc(a.rep_open_date) BETWEEN 
                           Trunc(b.check_in_date) + 1 AND 
                           Trunc(b.check_in_date) - 1 

Aktualizacja:

Użyłeś operatora między, jak 10 between 11 and 9 ale powinno być 10 between 9 and 11

SELECT a.*, 
       b.* 
FROM   a 
       left outer join b 
                    ON a.vin = b.vin 
                       AND CAST(a.rep_open_date as date) BETWEEN 
                           CAST(b.check_in_date as date) - 1 AND 
                           CAST(b.check_in_date as date) + 1 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Scenariusze i kroki mają problem z ostatnią zmianą

  2. Skrypt Liquibase zwraca ORA-01843:niepoprawny miesiąc

  3. Źródło danych JNDI do Oracle z Grails 1.3

  4. Najszybszy odczyt OLEDB z ORACLE

  5. PIVOT Oracle - przekształć dane z wielu wierszy w jeden wiersz z wieloma kolumnami, bez danych zagregowanych