SQL子查询关联表查询出版汽车类杂志的出版社所有期刊
错误原因
你现有SQL触发报错的核心原因是WHERE条件后的子查询返回了100行结果,数据库无法将多行结果直接作为布尔判断条件使用,同时现有子查询逻辑没有关联出版社ID,完全无法实现你要的筛选需求。
实现逻辑
要满足需求只需两步:
- 第一步:筛选出分类为
cars的前100条Magazine记录,提取这些记录对应的唯一Publisher_ID列表 - 第二步:关联Magazine和Publisher全表,筛选出出版社ID在上述列表中的所有记录即可
修正后的SQL语句
通用适配MySQL、PostgreSQL等支持LIMIT语法的数据库:
SELECT m.*, p.* FROM Magazine m INNER JOIN Publisher p ON m.publisher_id = p.publisher_id WHERE m.publisher_id IN ( SELECT DISTINCT publisher_id FROM Magazine WHERE category = 'cars' LIMIT 100 )
如果使用SQL Server数据库,只需将子查询中的LIMIT替换为TOP语法即可:
SELECT m.*, p.* FROM Magazine m INNER JOIN Publisher p ON m.publisher_id = p.publisher_id WHERE m.publisher_id IN ( SELECT DISTINCT TOP 100 publisher_id FROM Magazine WHERE category = 'cars' )
效果说明
上述语句返回的结果会包含所有出现在前100条cars类期刊对应的出版社旗下的全部期刊信息,包含Magazine和Publisher表的所有字段,可覆盖除cars外的其他分类,自动排除未出版过对应cars类期刊的出版社及相关记录,结果条数会远大于100,完全符合你的需求。
内容的提问来源于stack exchange,提问作者JLuu
相关产品推荐
相关产品推荐

