我有两张桌子
First_Table:
ID(PK),姓名,地址
Second_Table:
ID(PK),InfoID(来自First_Table的ID为FK),BookName
我想得到第二张表中没有任何记录的记录数?
答案 0 :(得分:3)
使用not exists
。
select count(*)
from first_table f
where not exists (select 1 from second_table s where s.infoid = f.id)
答案 1 :(得分:1)
这就是外连接(以及其他内容):
SELECT COUNT(*)
FROM FIRST_TABLE t1
LEFT OUTER JOIN SECOND_TABLE t2
ON t2.INFOID = t1.ID
WHERE t2.ID IS NULL
因为SECOND_TABLE.ID是主键,所以表中不能为NULL,因此如果SECOND_TABLE.ID在外连接的产品中显示为NULL,则表示没有找到SECOND_TABLE行。
供将来参考 - 我建议您不要使用ID
作为列名。如果您有30个表,所有表都有ID
作为主键,这可能会非常混乱。此外,如果您在所有表上使用ID作为主键名,则意味着任何外键列必须具有与其引用的键列不同的名称,这再次增加了混淆。相反,我建议您使用ID_
+表的名称 - 因此,FIRST_TABLE上的主键可能是ID_FIRST_TABLE
,而SECOND_TABLE上的主键可能是ID_SECOND_TABLE
。通过这种方式,每个表最终都有一个唯一的主键列名称 - 如果你需要打开一个列,比方说,SECOND_TABLE引用FIRST_TABLE,SECOND_TABLE上的列名将是ID_FIRST_TABLE
,立即生成清除列的用途以及它引用的表。只是一个想法。
祝你好运。
答案 2 :(得分:0)
虽然@ vkp的回答是正确的,但您也可以使用减号来解决问题 -
select count(*)
from (select id from first_table
minus
select infoid from second_table)