无法根据PostgreSQL中另一个表中的数据筛选一个表中的行
我的PostgreSQL数据库(第9.5页,x64窗口)中有两个表无法根据PostgreSQL中另一个表中的数据筛选一个表中的行,postgresql,Postgresql,我的PostgreSQL数据库(第9.5页,x64窗口)中有两个表tbl1(552行)和tbl2(257行)的行数不相等。表tbl1和tbl2包含以下数据(此处显示的示例): 对于表1中的每个组,我试图选择第一个表中的“id”不等于第二个表中的“id”的行。例如,我的预期输出是: Grp id val1 val2 sum 1 2 124 137 6.7 1 4 112 114 9.8 1 5 130
tbl1
(552行)和tbl2
(257行)的行数不相等。表tbl1和tbl2包含以下数据(此处显示的示例):
对于表1中的每个组,我试图选择第一个表中的“id”不等于第二个表中的“id”的行。例如,我的预期输出是:
Grp id val1 val2 sum
1 2 124 137 6.7
1 4 112 114 9.8
1 5 130 145 6.1
到目前为止,我已经尝试过这个查询,但它不起作用,并且返回空输出
SELECT
a.grp, a.id,
a.val1, a.val2, a.sum
FROM tbl1 a
WHERE NOT EXISTS (
SELECT *
FROM tbl2 b WHERE b.grp = a.grp AND b.id != a.id
)
有人能帮我解释一下我做错了什么吗?您的查询的问题是,
NOT EXISTS
子句将始终返回false,其中包含示例中显示的数据(对于a中的每一行,b中有一行grp相同,但id不同)
带有为空的左连接
过滤器将执行以下操作:
SELECT a.grp, a.id,
a.val1, a.val2, a.sum
FROM tbl1 a
LEFT JOIN tbl2 b ON a.grp = b.grp AND a.id = b.id
WHERE b.id IS NULL --b.id is null if there is no row in b which matches both a.grp and a.id
查询的问题是,notexists
子句总是返回false,其中包含示例中显示的数据(对于a中的每一行,b中有一行grp相同,但id不同)
带有为空的左连接
过滤器将执行以下操作:
SELECT a.grp, a.id,
a.val1, a.val2, a.sum
FROM tbl1 a
LEFT JOIN tbl2 b ON a.grp = b.grp AND a.id = b.id
WHERE b.id IS NULL --b.id is null if there is no row in b which matches both a.grp and a.id
由于您使用的是notexists
,因此您需要的条件是b.id=a.id
和NOTb.id!=a、 id
:
...................
WHERE b.grp = a.grp AND b.id = a.id
...................
由于您使用的是notexists
,因此您需要的条件是b.id=a.id
和NOTb.id!=a、 id
:
...................
WHERE b.grp = a.grp AND b.id = a.id
...................
更改为和b.id=a.id
是否愿意作为答案发布?更改为和b.id=a.id
是否愿意作为答案发布?嘿,谢谢你的帮助,我试过了,但是NULL的技巧不起作用,干杯!嘿,谢谢你的帮助,我试过了,但是NULL的把戏不起作用,干杯!