微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PostgreSQL中使用EXCEPT子句

我试图使用EXCEPT子句从表中检索数据.我想获取table1中的所有行,除了table2中存在的那些行.
据我所知,以下内容不起作用:

CREATE TABLE table1(pk_id int,fk_id_tbl2 int);
CREATE TABLE table2(pk_id int);

Select fk_id_tbl2
FROM table1
Except
Select pk_id
FROM table2

我可以使用EXCEPT的唯一方法似乎是从相同的表中选择或从不同的表中选择具有相同列名的列.

有人可以解释一下如何最好地使用explain子句吗?

解决方法

您的查询似乎完全有效:

SELECT fk_id_tbl2 AS some_name
FROM   table1
EXCEPT  -- you may want to use EXCEPT ALL
SELECT pk_id
FROM   table2;

列名与查询无关.只有数据类型必须匹配.查询输出列名是fk_id_tbl2,因为它是第一个SELECT中的列名.您可以使用任何别名.

经常被忽视的是:EXCEPT(折叠重复)和EXCEPT ALL之间的细微差别 – 它保留了所有单独的不匹配行.
更多解释和其他方法来做同样的事情,其中​​一些更灵活:

> Select rows which are not present in other table

Details for EXCEPT in the manual.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐