축구 및 체스에 가입했지만 테니스에 가입하지 않은 직원의 세부 정보를 표시합니다.두 쿼리가 다른 이유는 무엇입니까?
SELECT *
FROM employee
WHERE empid IN (SELECT empid
FROM subscription
WHERE facid IN (SELECT facid
FROM facility
WHERE facility = 'Chess'
OR facility = 'Football'))
AND empid NOT IN (SELECT empid
FROM subscription
WHERE facid = (SELECT facid
FROM facility
WHERE facility = 'Tennis'));
SELECT DISTINCT empid
FROM subscription
WHERE facid IN (SELECT facid
FROM facility
WHERE facility = 'Chess'
OR facility = 'Football')
AND facid != (SELECT facid
FROM facility
WHERE facility = 'Tennis');
첫 번째 것은 올바른 결과를 제공합니다.
JOIN에 대해 들어 보셨습니까? –
데이터를 보지 않고 "올바른 결과"가 무엇인지, "잘못된 결과"가 무엇인지 이해하면 해결할 수 없습니다. – Oded
@Oded : 데이터가 없어도 두 번째 쿼리의 AND가 어떻게 작동하는지 설명하십시오. –