Bạn có thể sử dụng WITH để làm cho việc này hoạt động tốt hơn (và dễ bảo trì hơn):
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
);
Như vậy, điều này sẽ trả về 10 hàng từ truy vấn2. Nếu bạn xóa nơi 1 =0 khỏi query1 (khiến nó thực sự trả về các hàng), bạn sẽ nhận được 10 hàng từ query1.