我有两个表A
和B
,A
由B
字段引用A.id_b B.id
,因此任何id_b
值都存在于B.id
。
我有三个问题: 第一个:
SELECT COUNT(b.id)
FROM B b
WHERE b.id NOT IN (
SELECT a.id_b
FROM A a)
它给了我0
;
第二个,区别仅在于NOT
:
SELECT COUNT(b.id)
FROM B b
WHERE b.id IN (
SELECT a.id_b
FROM A a)
此查询为我提供:1899
第三个:
SELECT COUNT(b.id)
FROM B b
这个查询给了我3599
同样的结果:
SELECT a.id_b
FROM A a
保证我将B.id
分成两组,并且两组中的元素数量必须计算总元素数,但我有: 1899 + 0!= 3599 。
怎么可能?
答案 0 :(得分:1)
此查询告诉我们表B总共有3599行:
SELECT COUNT(b.id)
FROM B b
下一个查询告诉我们B中的每一个id都用在A:
中SELECT COUNT(b.id)
FROM B b
WHERE b.id NOT IN (
SELECT a.id_b
FROM A a)
此外,该查询告诉表B表中有1899个id,如表A所示:
SELECT COUNT(b.id)
FROM B b
WHERE b.id IN (
SELECT a.id_b
FROM A a)
对此唯一可能的解释是,表A中的某些B.id作为A.id_b在每行中使用多次。 运行此查询将显示表A中所有重复的id_b提及列表:
SELECT a.id_b
FROM A a
GROUP BY a.id_b
HAVING count(a.id_b) > 1
答案 1 :(得分:1)
NULL
中的值为A.id_b
。这就是为什么查询:
SELECT COUNT(b.id)
FROM B b
WHERE b.id NOT IN (
SELECT a.id_b
FROM A a)
正在返回0
。