SQL获取没有在项目上工作的名称

时间:2018-03-15 10:10:49

标签: sql postgresql

我想检索那些没有在PostgreSQL中处理项目的人的姓名。

我找到了一张名为employees的表,其namesssn

我的第二个表名为works_on,其中包括ssnproject_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

但这没有任何回报,但我需要一个不在单个项目上工作的名字。 有人可以向我解释如何做到这一点?提前谢谢。

4 个答案:

答案 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

此备选方案很有用,因为您有时会有更复杂的要求,无法使用INEXISTS轻松表达。

答案 2 :(得分:1)

试试这个

SELECT fname,lname
FROM werknemer w
WHere w.snn not in (Select wa.ssn from werkt_aan wa)

答案 3 :(得分:1)

你需要在这里使用NOT IN和子查询