在PostgreSQL中使用EXCEPT子句

时间:2016-02-11 01:50:16

标签: sql 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子句吗?

1 个答案:

答案 0 :(得分:5)

您的查询似乎完全有效:

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之间的微妙差异 - 它保留了所有个别不匹配的行。 更多解释和其他方法来做同样的事情,其中​​一些更灵活:

Details for EXCEPT in the manual.