在 PostgreSQL 中使用 EXCEPT 子句
Using EXCEPT clause in PostgreSQL
我正在尝试使用 EXCEPT
子句从 table 检索数据。我想从 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
的唯一方法似乎是 select 来自相同的 table 或 select 具有相同列名的列来自不同的 tables.
有人可以解释一下如何最好地使用解释子句吗?
您的查询似乎完全有效:
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
我正在尝试使用 EXCEPT
子句从 table 检索数据。我想从 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
的唯一方法似乎是 select 来自相同的 table 或 select 具有相同列名的列来自不同的 tables.
有人可以解释一下如何最好地使用解释子句吗?
您的查询似乎完全有效:
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