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

解决SQLite歧义列名错误,统计浪漫喜剧交叉类电影数量

问题解决与正确SQL查询

数据库结构说明

三张核心表:

  • movies:存储电影基础信息,包含movie_id(主键)、title等字段
  • genres:存储电影类型信息,包含genre_id(主键)、genre_name字段
  • genremap:关联表,通过movie_id和genre_id建立电影与类型的多对多关系

错误原因分析

你写的SQL存在几个核心问题:

  • UNION使用错误:UNION要求前后两个查询返回的列数、数据类型完全一致,但你第一个查询返回电影标题,第二个返回genre_id,根本不匹配。
  • 表关联逻辑混乱:第二个查询里LEFT JOIN genres ON g.genre_id = gs.genre_id属于无效关联,而且重复引用genres表却没给别名,导致genre_id列名歧义,触发ambiguous column name错误。
  • 逻辑方向错误:你要找的是同时属于两种类型的电影,用OR只会把两种类型的电影全拉出来,没法筛选交集。

正确SQL查询

要统计同时属于浪漫片(Romance)和喜剧片(Comedy)的电影数量,正确的思路是找到同时关联了这两个类型的movie_id,再去重统计数量,以下两种方法都可行:

方法一:分组筛选法

SELECT COUNT(DISTINCT m.movie_id) AS romantic_comedy_count
FROM movies m
JOIN genremap gm ON m.movie_id = gm.movie_id
JOIN genres g ON gm.genre_id = g.genre_id
WHERE g.genre_name IN ('Romance', 'Comedy')
GROUP BY m.movie_id
HAVING COUNT(DISTINCT g.genre_id) = 2;

方法二:子查询交集法

SELECT COUNT(DISTINCT m.movie_id) AS romantic_comedy_count
FROM movies m
WHERE m.movie_id IN (
    SELECT gm.movie_id
    FROM genremap gm
    JOIN genres g ON gm.genre_id = g.genre_id
    WHERE g.genre_name = 'Romance'
)
AND m.movie_id IN (
    SELECT gm.movie_id
    FROM genremap gm
    JOIN genres g ON gm.genre_id = g.genre_id
    WHERE g.genre_name = 'Comedy'
);

运行任意一个查询,就能得到符合要求的电影数量,对应选项中的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:25:25