2017-02-05 5 views
0
  1. 다음의 관계를 얻을 항공 비행 정보를 추적 유지를 운영하는 인증 있음 :

    FLIGHTS (flno : 정수에서 : 문자열로를 : 인증 (eid : 정수, 보조 : 정수) 직원 (eid : 정수, 출발 : 시간, 도착 : 시간, 가격 : 정수)
    공수 정수, ename : 문자열, 급여 : 정수)

참고 : - 근로자 관계가 조종사와 다른 종류의 직원을 묘사 함. 모든 조종사는 일부 항공기에 대해 인증을 받았으며 조종사 만 으로 인증되었습니다.

질문 : 항공기 명을 찾아서 작동하도록 인증 된 모든 조종사가 $ 80,000 이상 벌어 들일 수 있도록하십시오. 이 query.my 쿼리와

도움말 나

SELECT DISTINCT A.aname FROM AIRCRAFT A WHERE A.Aid IN 
(SELECT C.aid FROM CERTIFIED C, EMPLOYEES E WHERE C.eid = E.eid AND NOT EXISTS 
(SELECT * FROM EMPLOYEES E1 WHERE E1.eid = E.eid AND E1.salary < 80000)) ; 

이 쿼리는 직원의 미만 80,000 적립 경우에도 비행의 이름을 제공한다.

+1

왜 이러한 많은 서브 쿼리가 간단한 결합으로 시도하십시오. –

+0

아래 답변을 닫습니다. 논리는 '80000보다 적게 수입하는 조종사가없는 리턴 행'입니다. 즉 'LEFT JOIN ... ON ... 및 급여 <= 80000 WHERE ... IS NULL' – Strawberry

답변

0
SELECT distinct aname FROM aircraft 
JOIN certified ON aircraft.aid = certified.aid 
JOIN employees ON employees.eid = certified.eid 
WHERE employees.salary> 80000 
AND aircraft.aid NOT IN 
(SELECT aircraft.aid FROM aircraft 
JOIN certified ON aircraft.aid = certified.aid 
JOIN employees ON employees.eid = certified.eid 
WHERE employees.salary <= 80000)