如何检查是否每个主键值都被引用为另一个表中的外键

时间:2016-09-29 04:22:49

标签: mysql sql

我有两个表tb1和tb2。 tb1中的id是pk,在tb2中引用为fk。 我想知道tb1的id值是1,2,3,4,5而tb2的fk_values是1,2,3,4但是pk 5没有,我怎么能找到它。

tb1
------
id   
------
1    
------
2   
------
3    
------
4
------
while tb2 

fk_id
-------
1
--
1
--
2
--
3
--
3
--

但是表2没有4的值,那我怎么能在这里找到4值。

要使用的数据库是mysql。

2 个答案:

答案 0 :(得分:3)

要查找tb1中的内容而不是tb2中的内容,请执行以下操作:

SELECT tb1.* FROM tb1 LEFT JOIN tb2 ON tb1.id = tb2.fk_id WHERE tb2.fk_id IS NULL

以另一种方式(在tb2中而不是在tb1中)这样做,在这种情况下不能,因为,有一个外键,但是稍后它可能对你有用,以后只需切换两个表

SELECT tb2.* FROM tb2 LEFT JOIN tb1 ON tb1.id = tb2.fk_id WHERE tb1.id IS NULL

答案 1 :(得分:0)

使用left joinleft join将为您提供仅存在于左表中的结果。这意味着您必须像这样使用tb1 left join tb2。

// pick the tb1.id in the result when the fk_id is null.
select tb1.id from tb1 left join tb2 on tb1.id = tb2.fk_id where tb2.fk_id is null;