2014-02-12 4 views
0

Я хочу, чтобы empno работал, по крайней мере, во всех тех же проектах, на которых работает empno 101.ALL ключевое слово в Oracle SQL

Я попробовал следующий запрос, но не смог:

SELECT EMPNO 
FROM EMPLOYEE 
WHERE PROJECTNO= ALL(SELECT PROJECTNO 
        FROM EMPLOYEE 
        WHERE EMPNO=101); 

Empno 101 работает на 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

Oracle И MySQL или только один из них? – DanFromGermany

+0

oracel sqlplus. – ashwinbhy

+0

что вы пожелаете результата? –

ответ

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 

DEMO HERE

+0

In даст мне несколько значений, которые я не хочу. emp 101 работает над двумя проектами, если какой-либо сотрудник работает в любом из проектов. Я хочу сотрудника, который работает во всех проектах emp101. – ashwinbhy

+0

@ashwinbhy попробуйте отредактированный ответ. –

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 Все его также для Exact Match

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) 
0

Это звучит как своего рода Relational отдела:

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) 
Смежные вопросы