sql >> Databasteknik >  >> RDS >> Oracle

Oracle - Vänster yttre sammanfogning med where-sats

Din förklaring stämmer inte med din fråga. Du har nämnt

"Men jag måste också inkludera en where-sats men... Jag vill fortfarande att en rad från den vänstra tabellen ska returneras för varje post i den vänstra tabellen även om villkoret i where-satsen inte är inte träffat. "

Så jag tror att din fråga ser ut ungefär så här

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 ovanstående LEFT OUTER JOIN kommer att konverteras till INNER JOIN på grund av filtreringen av höger tabell i Where klausul

Så som du har använt i den första frågan bör de rätta tabellfiltren vara en del av JOIN condition, Vilket kommer att returnera rader från VÄNSTER tabell även om det inte finns några matchande poster i RIGHT sidotabell.

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 

Uppdatering:

Du har använt en operator som 10 between 11 and 9 men det ska vara 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. Hur får man näst sista raden från en mysql-databas?

  2. Definiera flerradiga strängar i psql

  3. EF5:Kan inte bifoga filen '{0}' som databas '{1}'

  4. pg_upgrade på Windows kan inte skriva till loggfilen pg_upgrade_internal.log