一尘不染

在PostgreSQL中使用EXCEPT子句

sql

我正在尝试使用该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似乎是从相同的表中选择,或者从不同的表中选择具有相同列名的列。

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


阅读 976

收藏
2021-03-10

共1个答案

一尘不染

您的查询似乎完全有效:

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,仅因为它是first中的列名称SELECT。您可以使用任何别名。

经常被忽略的是:(EXCEPT折叠重复项)和EXCEPTALL-之间的细微差别,使所有单独的不匹配行保持一致。

EXCEPT手册中的详细信息。

2021-03-10