无法根据PostgreSQL中另一个表中的数据筛选一个表中的行

无法根据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

我的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    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
和NOT
b.id!=a、 id

...................
WHERE b.grp = a.grp AND b.id = a.id
...................

由于您使用的是
notexists
,因此您需要的条件是
b.id=a.id
和NOT
b.id!=a、 id

...................
WHERE b.grp = a.grp AND b.id = a.id
...................

更改为
和b.id=a.id
是否愿意作为答案发布?更改为
和b.id=a.id
是否愿意作为答案发布?嘿,谢谢你的帮助,我试过了,但是NULL的技巧不起作用,干杯!嘿,谢谢你的帮助,我试过了,但是NULL的把戏不起作用,干杯!