sql >> Database >  >> RDS >> Oracle

Oracle - Linker outer join met where-clausule

Uw uitleg komt niet overeen met uw vraag. Je hebt genoemd

"Ik moet echter ook een where-clausule opnemen, maar.... Ik wil nog steeds dat een rij uit de linkertabel wordt geretourneerd voor elk record in de linkertabel, zelfs als de voorwaarde in de waar-clausule is niet ontmoet. "

Dus ik denk dat je vraag er ongeveer zo uitziet

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 het bovenstaande de LEFT OUTER JOIN wordt omgezet in INNER JOIN vanwege de filtratie van de rechtertabel in Where clausule

Dus zoals u in de eerste query hebt gebruikt, moeten de juiste tabelfilters deel uitmaken van JOIN voorwaarde, die rijen uit de LINKER-tabel retourneert, ook al zijn er geen overeenkomende records in de RECHTER-tabel.

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 

Bijwerken:

Je hebt tussen operatoren gebruikt zoals 10 between 11 and 9 maar het moet 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. Kan JNDI-bron in bestand persistence.xml niet aanroepen

  2. mysql echo haalt geen woord op na een spatie in tekstvak

  3. Een SELECT-instructie die een waarde aan een variabele toewijst, mag niet worden gecombineerd met bewerkingen voor het ophalen van gegevens

  4. BULK VERZAMEL LIMIET in UITVOEREN ONMIDDELLIJKE