PostgreSQL:在哪里和不在那里

dev*_*Rew 6 postgresql where-in

我有两个表AB,由字段A引用,因此任何值都存在于.BA.id_b B.idid_bB.id

我有三个疑问:第一个:

SELECT COUNT(b.id)
FROM B b
WHERE b.id NOT IN (
    SELECT a.id_b
    FROM A a)
Run Code Online (Sandbox Code Playgroud)

它给了我0

第二个,区别仅在于NOT

SELECT COUNT(b.id)
FROM B b
WHERE b.id IN (
    SELECT a.id_b
    FROM A a)
Run Code Online (Sandbox Code Playgroud)

这个查询给了我: 1899

第三个:

SELECT COUNT(b.id)
FROM B b
Run Code Online (Sandbox Code Playgroud)

这个查询给了我 3599

相同的结果:

SELECT a.id_b
FROM A a
Run Code Online (Sandbox Code Playgroud)

保证我B.id分成两组,并且两组中的元素数必须很多总元素数,但我有:1899 + 0 != 3599

那怎么可能?

dev*_*Rew 4

找到原因了。A 中有记录,其NULL值在 中A.id_b。这就是为什么查询:

SELECT COUNT(b.id)
FROM B b
WHERE b.id NOT IN (
    SELECT a.id_b
    FROM A a)
Run Code Online (Sandbox Code Playgroud)

正在返回0