跨多个连接“不存在”

“Not exists” across multiple joins

我正在学习 sql (postgres) 并且我喜欢查找不存在的值。

我有一个 table、table 1 和 ID,我想找到那些不在 table 4.

中的 ID

我必须在 3 table 之间加入,因为 table 1 持有 id 而 table 4 contact_id(不同的数字)

需要连接 tables 2,3,因为它连接了 id。

那么我该如何处理“不存在”呢?

Select t1.id, table4.contact_id
From table1 t1
Join table2 using(id)
Join table3 using(id)
Join table4 using(contact_id)
Where not exists (
  Select 1
  From table4
  Where table4.contact_id=t1.id
  );

它returns没有值,但应该 没有错误信息…

我假设有思维错误

您的查询可能 returns 没有值,因为您在 contact_id 上加入了 table4,然后您在 WHERE 子句中排除了来自该加入的行。

要查找不存在的值,通常可以使用LEFT JOINRIGHT JOINFULL OUTER JOIN,然后在WHERE 子句。

试试这个:

SELECT t1.id
FROM table1 t1
LEFT JOIN table2 t2 using(id)
LEFT JOIN table3 t3 using(id)
LEFT JOIN table4 t4 using(contact_id)
WHERE t4.contact_id IS NULL