从两个具有空值的表中查找不匹配的记录

时间:2018-08-03 11:54:21

标签: oracle

我想从table2中找到不匹配的val记录。它也有空值

表1

id  val
1   10
2   20
3   30
4   null

table2

id  val
1   10
3   30
4   null

对于上面的示例,其应返回20。

2 个答案:

答案 0 :(得分:0)

简单的存在结构在这里起作用

with tmp1 as(
  select 1 id, 10 val from dual
  union
  select 2 id, 20 val from dual
  union
  select 3 id, 30 val from dual
  union
  select 4 id, null val from dual),
tmp2 as(
  select 1 id, 10 val from dual
  union
  select 3 id, 30 val from dual
  union
  select 4 id, null val from dual)

select
  tmp1.*
from
  tmp1
where
  not exists(
    select
      null
    from
      tmp2
    where
      nvl(tmp1.val,-1) = nvl(tmp2.val,-1))

答案 1 :(得分:0)

您可以使用MINUS运算符

select id, val from table1
minus
select id, val from table2

它从上层查询中选择不在下层查询中的所有行

SQL Fiddle demo