所以,我有这样的模式:
Emp(eid: integer,ename: string,age: integer,salary: real)
Works(eid:integer,did: integer,pct_time: integer)
Dept(did:integer,budget: real,managerid:integer)
我想返回那些薪水高于任何经理的员工(无论他们的部门是什么)。
select E.ename, D.did, E.eid
from Emp E
join Works W ON E.eid = W.eid
join Dept D ON D.did = W.did
where E.salary > (select E2.salary from Emp E2, Dept D2
where E2.eid = D2.managerid)
但是sub查询语句返回了多行。如何比较两个表中的多个行以获得正确的结果?分组应该是可行的,对吧?
发布于 2017-03-20 01:07:21
你的需求可以转化为找到一名员工,他的经理的工资低于他的工资。你可以试试这个。
SELECT e.*
FROM emp e
WHERE EXISTS (SELECT 1
FROM emp e2 INNER JOIN
dept d2
ON e2.eid = d2.managerid
WHERE e2.salary < e.salary);
发布于 2017-03-20 01:01:22
如果你想返回工资高于任何经理的员工,为什么不找出所有员工的工资高于所有经理的最低工资?
select E.ename, D.did, E.eid
from Emp E
join Works W ON E.eid = W.eid
join Dept D ON D.did = W.did
where E.salary > (select min(E2.salary)
from Emp E2, Dept D2
where E2.eid = D2.managerid)
https://stackoverflow.com/questions/42889079
复制相似问题