2017-10-18 3 views
-2
SELECT S.sname 
FROM Sailors S 
WHERE S.sid NOT IN (SELECT R.sid 
     FROM Reserves R 
     WHERE R.bid NOT IN (SELECT B.bid  
     FROM Boats B 
     WHERE B.color='red')) 

이것을 이해하려고합니다. 이 쿼리는 보트를 예약하지 않은 선원과 선원 만 예약 한 선원의 이름을 어떻게 찾을 수 있습니까? 다른 NOT IN에 내포 된 NOT IN은 어떻게 작동합니까?NOT IN()을 사용하는 중첩 된 쿼리 - 어떻게 작동합니까?

+1

당신이 선생님을 어떤 질문 : 우리가 더 읽을 수 있도록 JOIN을 사용할 수 있습니다 예컨대 생각? – Ravi

+0

가장 안쪽의 쿼리는 모든 붉은 색 보트를 가져올 것이고 내부 쿼리는 붉은 색 보트 사이에 예약 된 보트를 모두 가져오고 외부 쿼리는 붉은 색 보트를 예약 한 모든 선원을 가져올 것입니다. –

답변

0

귀하의 검색어는 red이 아닌 reserves에 속하지 않은 sailors을 보여줍니다.

이 방법으로 그것을 다시 작성할 수 있습니다 :

SELECT S.sname 
FROM Sailors S 
WHERE S.sid NOT IN (SELECT R.sid 
     FROM Reserves R 
     WHERE R.bid IN (SELECT B.bid  
     FROM Boats B 
     WHERE B.color <> 'red')) 
+0

https://ibb.co/bXqkRR –

+0

https://ibb.co/nj6Lt6 –

+0

그게 테이블과 코드의 출력입니다 –

0

이 쿼리는 빨간색이 아닌 다른 색상으로 배를 예약하는 모든 선원을 제외하려고합니다. 나는

SELECT s.name 
FROM sailors s LEFT JOIN reserves r ON s.sid = r.sid 
JOIN boats b on r.bid = b.bid 
WHERE b.color = 'Red' 
GROUP BY s.name 
HAVING COUNT(DISTINCT(b.color)) <= 1; 
+0

예약에서 표시되지 않는 선원은 전혀 제외했을 것입니다. – NikNik

+0

@NikNik 더 이상 추측하지 않습니다 .. –

+0

https://ibb.co/bXqkRR –