我目前正在将逗号分隔的字符串转换为字段名称为ID的数字表。我正在尝试做一个nvl,如果生成的表为null,则选择all。
table1.ID = NVL(table2.ID, table1.ID)
我有两个表,需要使用table2的结果过滤table1。如果table2为空,我需要返回table1的所有内容。
情景I
表1
ID
1
2
3
4
表2(空)
ID
Return rows 1, 2, 3, 4
情景II
表1
ID
1
2
3
4
表2
ID
2
3
返回第2,3行
答案 0 :(得分:3)
您可以在where
子句中使用过滤:
select t1.id
from table1 t1
where not exists (select 1 from table2) or
exists (select 1 from table2 t2 where t2.id = t1.id);
我不认为join
是表达这种逻辑的正确方法。
答案 1 :(得分:0)
您也可以使用UNION
select t1.id
from table1 t1
where not exists (select 1 from table2 where id = t1.id) union all
select t2.id
from table2 t2
where exist (select 1 from table1 where id = t2.id);