跨多个连接“不存在”
“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 JOIN
或RIGHT JOIN
或FULL 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
我正在学习 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 JOIN
或RIGHT JOIN
或FULL 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