Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle DB:Gibt die zweite Abfrage zurück, wenn die erste Abfrage leer ist

Sie können WITH verwenden, um die Leistung zu verbessern (und einfacher zu warten):

WITH query1 as (
    select 1, 2
    from dual
    where 1=0
    connect by level <= 10
),
query2 as (
    select 3, 4
    from dual
    connect by level <= 10
)
select *
from query1
union all
select *
from query2
where not exists (
    select null
    from query1
);

Dies sollte die 10 Zeilen von Abfrage2 zurückgeben. Wenn Sie das where 1=0 aus Abfrage1 entfernen (wodurch es tatsächlich Zeilen zurückgibt), sollten Sie die 10 Zeilen aus Abfrage1 erhalten.