pgSQL NOT IN,EXIST,INNER JOIN - 搜索表之间的差异(id)

时间:2015-05-22 15:31:04

标签: sql postgresql postgresql-9.4

我需要在tab_b的字段tab_b.id_tab_a中找到哪些行(tab_a.id_taba)不存在

我有两张桌子。 tab_a,tab_b

tab_a字段: id_taba(2,3,4,5),name,name2

tab_b字段 id_tabb(0,1,2,3,4,5,6,7,8),id_tab_a(0,1,2,3),field1,field2,

我搜索时

SELECT * FROM tab_a WHERE id_taba NOT IN (SELECT id_tab_a FROM tab_b)

它不起作用,但如果在同一语句中我将语句交换为:

SELECT * FROM tab_b WHERE id_tab_a NOT IN (SELECT id_taba FROM tab_a)

它显示2行:'0','1'

我正试图在tab_b.id_tab_a

中找到tab_a.id_taba中哪些行没有

请给我一个提示和解释,为什么它不起作用。

1 个答案:

答案 0 :(得分:1)

使用完全外部联接,您可以找到在任一表中查看不存在于另一个表中的记录的方法。

SELECT A.id_taba A, B.id_tab_a B
FROM tab_a A
FULL OUTER JOIN tab_b
 on A.id_taba = B.id_tab_a
WHERE a.id_taba is null or B.B.id_tab_a is null

如果删除where子句,则可以看到所有记录。但是因为你似乎是在不匹配之后......使用空值!

CodingHorror对连接和视觉辅助工具有很好的解释!