sql >> Databáze >  >> RDS >> Oracle

Oracle - Levé vnější spojení s klauzulí where

Vaše vysvětlení nesouvisí s vaším dotazem. Zmínili jste

"Potřebuji však také zahrnout klauzuli where, ale.... Stále chci, aby se pro každý záznam v tabulce nalevo vrátil řádek z tabulky na levé straně, i když je podmínka v klauzuli where 'nesetkali. "

."

Takže věřím, že váš dotaz vypadá nějak takto

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 

Ve výše uvedeném LEFT OUTER JOIN budou převedeny na INNER JOIN kvůli filtraci pravé tabulky v Where doložka

Jak jste použili v prvním dotazu, správné filtry tabulek by měly být součástí JOIN podmínka, která vrátí řádky z LEVÉ tabulky, i když v PRAVÉ postranní tabulce nejsou žádné odpovídající záznamy.

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 

Aktualizace:

Použili jste mezi operátory jako 10 between 11 and 9 ale mělo by to být 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. Jak funguje funkce UCASE() v MySQL

  2. proč to nevytahuje data ze 7 dnů zpět?

  3. Vyhledejte záznam s apostrofem v dotazu podobném mysql

  4. Spuštění balíčku SSIS pomocí dtexec