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

问题描述:

我有两个表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。

要了解什么是在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 

使用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;