📅  最后修改于: 2023-12-03 15:38:23.057000             🧑  作者: Mango
在 PostgreSQL 中,except
关键字用于从第一个查询结果中删除第二个查询结果中也有的行。在某些情况下,我们需要计算这个差异的行数。下面介绍如何在 psql 中使用 except
计数。
假设我们有两张表,分别是 t1
和 t2
,它们的结构如下:
CREATE TABLE t1 (id INT, name VARCHAR);
CREATE TABLE t2 (id INT, name VARCHAR);
INSERT INTO t1 VALUES (1, 'a'), (2, 'b'), (3, 'c');
INSERT INTO t2 VALUES (2, 'b'), (3, 'c'), (4, 'd');
t1
中有 3 条记录,t2
中有 3 条记录。
我们可以使用 except
运算符来找出在 t1
中但不在 t2
中的记录。语法如下:
SELECT * FROM t1 EXCEPT SELECT * FROM t2;
这条语句会返回以下结果:
id | name
----+------
1 | a
(1 row)
表示 t1
中有 1 条记录不在 t2
中。
为了计算差异的行数,我们可以为上述查询添加 count(*)
函数。语法如下:
SELECT count(*) FROM (SELECT * FROM t1 EXCEPT SELECT * FROM t2) AS t;
这条语句会返回以下结果:
count
-------
1
(1 row)
表示 t1
和 t2
之间的差异有 1 行。
在 psql 中使用 except
计数可以通过添加 count(*)
函数来实现。使用这个技巧可以更好地理解两个查询之间的差异。