Oracle Sql - 我有两个表,需要使用table2的结果过滤table1。如果table2为空,我需要返回所有table1

时间:2018-05-18 12:21:27

标签: sql oracle12c

我目前正在将逗号分隔的字符串转换为字段名称为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行

2 个答案:

答案 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);