如何检查每个主键值是否被引用为另一个表中的外键
问题描述:
我有两个表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 join
。 left 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;