嵌套查询,都使用NOT IN() - 这是如何工作的?
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() - 这是如何工作的?
您的查询显示不在reserves
的sailors
的船只不是red
。
您可以用这种方式重写:
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'))
https://ibb.co/bXqkRR –
https://ibb.co/nj6Lt6 –
这就是表格和代码的输出 –
这个查询试图排除所有谁保留一艘船除红色以外的任何颜色的水手。我相信我们可以用JOIN
以使其更具可读性,例如:
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;
什么是你的问题先生? – Ravi
最内层查询将获取所有红色船只,然后内部查询将获取红色船只中所有预留的船只,然后外部查询将获取所有预留红色船只的船员。 –