我想要至少在empno 101工作的所有相同项目上工作的empno。
我尝试了以下查询但失败了:
SELECT EMPNO
FROM EMPLOYEE
WHERE PROJECTNO= ALL(SELECT PROJECTNO
FROM EMPLOYEE
WHERE EMPNO=101);
Empno 101 IS正在研究comp134和comp90
而且empno 103也在开展这两个项目
但我得到的答案为no rows selected
以供下表。
projectno empno
--------- ------
comp134 101
comp90 101
comp90 103
comp14 104
comp213 103
comp134 103
comp14 108
comp90 104
答案 0 :(得分:1)
Exact 匹配:
SELECT EMPNO
FROM EMPLOYEE E1
WHERE EXISTS
(
SELECT 'x' FROM EMPLOYEE E2
WHERE E2.EMPNO=101 AND E1.PROJECTNO = E2.PROJECTNO
)
MINUS
SELECT EMPNO
FROM EMPLOYEE E1
WHERE NOT EXISTS
(SELECT 'x' FROM EMPLOYEE E2
WHERE E2.EMPNO=101 AND E1.PROJECTNO = E2.PROJECTNO)
对于Atleast 所有它也适用于完全匹配
SELECT EMPNO
FROM EMPLOYEE e
JOIN (SELECT PROJECTNO,count(1) OVER () AS ct
FROM EMPLOYEE
WHERE EMPNO=101) my_list
ON (e.PROJECTNO = my_list.PROJECTNO AND e.EMPNO <> 101)
GROUP BY EMPNO
HAVING count(*) = MAX(my_list.ct)
答案 1 :(得分:0)
试试这个
select `projectno` from
( select `projectno`, count(`empno`) as counts from EMPLOYEE
group by `empno`
order by counts desc
limit 1)t ;
甚至更简单
select `projectno`
from EMPLOYEE
group by `empno`
order by count(`empno`) desc
limit 1
答案 2 :(得分:0)
这听起来像是一种关系部门:
with cte as
( select PROJECTNO
from EMPLOYEE
WHERE EMPNO=101
)
SELECT EMPNO
FROM EMPLOYEE as e
join cte
on e.PROJECTNO = cte.PROJECTNO
group by EMPNO
HAVING count(*)
= (select count(*) from cte)