我想检索那些没有在PostgreSQL中处理项目的人的姓名。
我找到了一张名为employees
的表,其names
和ssn
。
我的第二个表名为works_on
,其中包括ssn
和project_number
ssn
此处是来自foreign key
employees
现在我尝试了以下内容:
SELECT fname,lname
FROM werknemer w
JOIN werkt_aan wa
ON (wa.ssn = w.ssn)
WHERE wa.ssn <> w.ssn
但这没有任何回报,但我需要一个不在单个项目上工作的名字。 有人可以向我解释如何做到这一点?提前谢谢。
答案 0 :(得分:3)
这通常使用NOT EXISTS
查询来解决:
select e.*
from employees e
where not exists (select *
from works_on wo
where wo.ssn = e.ssn)
答案 1 :(得分:2)
使用NOT IN
:
select * from employees
where ssn not in (select ssn from works_on)
替代LEFT JOIN
:
SELECT fname,lname
FROM employee w
LEFT JOIN works_on wa
ON (wa.ssn = w.ssn)
WHERE wa.ssn IS NULL
此备选方案很有用,因为您有时会有更复杂的要求,无法使用IN
或EXISTS
轻松表达。
答案 2 :(得分:1)
试试这个
SELECT fname,lname
FROM werknemer w
WHere w.snn not in (Select wa.ssn from werkt_aan wa)
答案 3 :(得分:1)
你需要在这里使用NOT IN和子查询