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

Oracle - Venstre ydre joinforbindelse med where-klausul

Din forklaring hænger ikke sammen med din forespørgsel. Du har nævnt

"Men jeg skal også inkludere en where-klausul, men... Jeg vil stadig have, at en række fra den venstre tabel returneres for hver post i den venstre tabel, selvom betingelsen i where-klausulen ikke er ikke mødt. "

Så jeg tror, ​​din forespørgsel ser sådan ud

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 

I ovenstående LEFT OUTER JOIN vil blive konverteret til INNER JOIN på grund af filtreringen af ​​højre tabel i Where klausul

Så som du har brugt i den første forespørgsel, bør de rigtige tabelfiltre være en del af JOIN betingelse, som vil returnere rækker fra VENSTRE tabel, selvom der ikke er nogen matchende poster i HØJRE sidetabel.

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 

Opdatering:

Du har brugt mellem operator som 10 between 11 and 9 men det skal være 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. Hvordan kan jeg få forskellen i timer mellem to datoer?

  2. Hvordan overvåger man kun t-sql-kommandoer i SQL Profiler?

  3. Oracle (PL/SQL):Er UPDATE RETURNING samtidig?

  4. DBMS_JOB vs DBMS_SCHEDULER