SQL查询求助:筛选预订红色船只且容量超200的唯一码头名称
修正你的SQL语句来满足需求
先梳理下你原SQL语句里存在的几个问题:
- JOIN关联条件语法错误:你写的
on (m.mid, r.mid)没有指定关联逻辑,正确的关联方式应该是on m.mid = r.mid,用来绑定码头表和预订表的关联字段 - 子查询使用
=存在风险:如果数据库里有多条红色船只记录,这个子查询会返回多条结果,用=会直接触发报错,应该改用IN来匹配多条结果 - 缺少码头容量过滤规则:你没有添加
capacity > 200的条件来筛选符合容量要求的码头
修正后的SQL语句
SELECT DISTINCT m.name FROM marina m JOIN reservation r ON m.mid = r.mid JOIN boat b ON r.bid = b.bid WHERE b.color = 'Red' AND m.capacity > 200;
语句逻辑解释
- 表关联:通过两次JOIN依次关联码头表、预订表和船只表,这样可以直接筛选出和红色船只有关联的预订记录,比子查询的写法更直观易读
- 条件过滤:
b.color = 'Red'锁定红色船只的预订记录,m.capacity > 200筛选出容量超过200的码头 - 去重处理:
DISTINCT确保同一个码头名称只会被返回一次
测试数据验证结果
根据你提供的测试数据,最终符合条件的结果只有Porto(mid=33,capacity=300),它既满足容量超过200的要求,同时存在红色船只(bid=1和bid=72)的预订记录。
内容的提问来源于stack exchange,提问作者user13398330
相关产品推荐
相关产品推荐

