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

Oracle - Join esterno sinistro con clausola where

La tua spiegazione non è correlata alla tua richiesta. Hai menzionato

"Tuttavia devo anche includere una clausola where ma.... Voglio comunque che venga restituita una riga dalla tabella di sinistra per ogni record nella tabella di sinistra anche se la condizione nella clausola where è non incontrato. "

Quindi credo che la tua domanda assomigli a questa

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 

In quanto sopra il LEFT OUTER JOIN verrà convertito in INNER JOIN a causa del filtraggio della tabella di destra in Where clausola

Quindi, come hai utilizzato nella prima query, i filtri della tabella corretti dovrebbero far parte di JOIN condizione, che restituirà le righe dalla tabella SINISTRA anche se non ci sono record corrispondenti nella tabella laterale DESTRA.

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 

Aggiornamento :

Hai usato tra operatori come 10 between 11 and 9 ma dovrebbe essere 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