【发布时间】:2017-01-09 18:20:12
【问题描述】:
我正在阅读一本教科书,但我不明白这个查询: 查找预订了所有船只的水手。
- 我们有 3 个表:
- 水手:sid、sname、等级、年龄(主要:sid)
- 船:出价(主要:出价)
- 储备:sid,bid,day(primary,sid,bid,day)(sid 是水手的外键,bid 是船的外键)
对于查询,查找已预订所有船只的水手,给出的答案是:
SELECT S.sname
FROM Sailors S
WHERE NOT EXISTS
((SELECT B.bid
FROM Boats B)
EXCEPT
(SELECT R.bid
FROM Reserves R
WHERE R.sid=S.sid))
我的问题是:
上面的查询有问题吗?当我将它放入 MySQL Workbench 时,它显示我有语法错误,除了
除了上面书中给出的解决方案,还有没有其他方法可以查询:查找已预订所有船只的水手
谢谢,
【问题讨论】:
-
except在 MySQL 中无效。您可以在 SQL Server 中使用它。 -
可以将
except改写成NOT EXISTS() -
你甚至可以把它改写成
NOT IN():stackoverflow.com/q/26697519/905902
标签: mysql sql relational-division not-exists sql-except