You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IN运算符的SQL嵌套子查询代码修正求助

修正你的嵌套子查询问题

嘿,我来帮你搞定这个可汗学院的SQL挑战!先拆解你第三、第四条语句里的问题,再给你针对性的修正方案:

先揪出错误根源

第三条语句的逻辑偏差

你写的代码:

SELECT name FROM artists WHERE genre IN ( SELECT title FROM songs WHERE artist = 'Queen');

这里犯了一个核心错误:子查询返回的是Queen的歌曲标题,但你却用它去匹配艺术家的genre(流派)——这俩完全不是同一类数据,IN运算符根本没法完成匹配,自然跑不出正确结果。

如果你的任务是找到所有和Queen同流派的艺术家,那应该先获取Queen的流派信息,再用这个流派去筛选艺术家,而不是拿歌曲标题凑数。

第四条语句的条件写错

你写的代码:

SELECT title FROM songs WHERE artist IN ( SELECT name FROM artists WHERE artist LIKE 'Pop');

这里的子查询条件明显搞错了!你要找的是Pop流派的艺术家,所以应该用genre LIKE 'Pop',而不是artist LIKE 'Pop'——artist字段存的是艺术家名字,用它匹配'Pop'根本找不到正确的艺术家列表。

修正后的可用代码

修正第三条语句(匹配Queen同流派艺术家)

如果任务允许直接从artists表获取流派,最简洁的写法是:

-- 先获取Queen的流派,再筛选同流派的所有艺术家
SELECT name FROM artists 
WHERE genre IN ( SELECT genre FROM artists WHERE name = 'Queen');

如果任务要求必须从songs表出发关联,也可以这么写:

SELECT name FROM artists 
WHERE genre IN ( 
  SELECT genre FROM artists 
  WHERE name = (SELECT artist FROM songs WHERE artist = 'Queen' LIMIT 1)
);

修正第四条语句(获取Pop流派艺术家的所有歌曲)

如果是模糊匹配流派(比如包含Pop的流派名称):

SELECT title FROM songs 
WHERE artist IN ( SELECT name FROM artists WHERE genre LIKE 'Pop');

如果要求严格匹配'Pop'流派,把LIKE换成=即可:

SELECT title FROM songs 
WHERE artist IN ( SELECT name FROM artists WHERE genre = 'Pop');

小提示

写嵌套子查询时,一定要确保子查询返回的字段和外层查询用来匹配的字段类型、含义完全一致,不然IN运算符就是在做无效匹配哦!

内容的提问来源于stack exchange,提问作者Mengu902

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 02:47:36