如何获取第二个表中没有任何记录的记录数?

时间:2016-05-22 20:19:41

标签: sql oracle

我有两张桌子

First_Table:

ID(PK),姓名,地址

Second_Table:

ID(PK),InfoID(来自First_Table的ID为FK),BookName

我想得到第二张表中没有任何记录的记录数?

3 个答案:

答案 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)