首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PostgreSQL中,什么是MySQL中的例外?

问在PostgreSQL中,什么是MySQL中的例外?
EN

Database Administration用户
提问于 2018-01-17 14:19:05
回答 1查看 7.7K关注 0票数 3

我想在MySQL中找出两个表的不匹配记录。

EN

回答 1

Database Administration用户

发布于 2018-01-17 14:42:38

您可以使用NOT EXISTS谓词。假设你想模仿:

代码语言:javascript
复制
select a.c1, a.c2 from a
except
select b.c1, b.c2 from b

这可以表示为:

代码语言:javascript
复制
select distinct a.c1, a.c2 
from a
where not exists (
    select 1 from b
    where b.c1 = a.c1
      and b.c2 = a.c2
)

其他选项是使用左联接并检查null:

代码语言:javascript
复制
select distinct a.c1, a.c2 
from a 
left join b 
    on a.c1 = b.c1 
   and a.c2 = b.c2 
where b.c1 is null

请注意,如果两个关系中都存在相同的元组并包含null,则这与EXCEPT不同。设a= { (1,1),(2,2),(1,null)},b= {(1,1),(1,空)}

代码语言:javascript
复制
select a.c1, a.c2 from a 
except 
select b.c1, b.c2 from b

(2,2)

在某种意义上,EXCEPT认为null等于null,而如果a.c2或b.c2为null,则谓词a.c2 = b.c2计算为null,因此NOT EXISTS计算为false。

代码语言:javascript
复制
select distinct a.c1, a.c2 
from a 
where not exists (
    select b.c1, b.c2 from b where a.c1 = b.c1 and a.c2 = b.c2
)

(2,2),(1,null)

LEFT JOIN的行为类似于NOT EXISTS:

代码语言:javascript
复制
select distinct a.c1, a.c2 
from a 
left join b 
    on a.c1 = b.c1 and a.c2 = b.c2 
where b.c1 is null

(2,2),(1,null)
票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/195592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档