【发布时间】:2017-05-10 05:18:00
【问题描述】:
在 Oracle 11 数据库中,我有 2 个表(CAR 和 CAR_BRAND):
CAR 有以下内容
car_id |brand
1 |Audi
2 |BMW
3 |VW
CAR_BRAND 有以下内容
brand
Audi
Bmw
使用 INNER JOIN 连接两个表很简单
select c.* from car c
inner join car_brand cb on cb.brand = c.brand;
我有一个要求,当 CAR_BRAND 表为空时,选择 CAR 内的所有记录,否则 select * from CAR 与 CAR_BRAND 表连接。
这可以通过以下方式完成:
SELECT c.* FROM car c JOIN car_brand cb ON cb.brand = c.brand
UNION ALL
SELECT c.*
FROM car c
WHERE NOT EXISTS
(SELECT c.* FROM car c JOIN car_brand cb ON cb.brand = c.brand
);
这很好,但是,有没有更好、更有效的 SQL 来获得最终结果,而不是使用 UNION ALL?
【问题讨论】: