我得到了这个架构:
Emp(eid: integer,ename: string,age: integer,salary: real)
Works(eid:integer,did: integer,pct_time: integer)
Dept(did:integer,budget: real,managerid:integer)
我无法概念化需要做什么。我正在考虑获取所有 managerid 的列表,然后以某种方式将 IN 与针对 eid 的子查询一起使用,但我不知道如何做到这一点。
select Works.eid
from Works inner join Dept using (did)
where Works.eid != Dept.managerid
and Works.eid in (select managerid as eid from Dept)
我们错过了一个信息:经理是否有 Works 行?我以为有。
Select d1.managerid
From Dept as d1
Where Exists
(Select 1 from Works
Join Dept as d2 using (did)
Where Works.eid = d1.managerid
And Works.eid != d2.managerid)
我认为使用“exists”比使用“in”更好。
如果您需要返回经理的完整信息,则需要在主查询中添加连接 Emp。