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

SQLite3查询两人共同出演电影时报ambiguous column name错误求解

ambiguous column name报错原因及修复方案

报错原因

你当前的查询逻辑中,两个子查询xx、yy都包含movie_id字段,两个子查询内连接后,结果集里会存在两个同名的movie_id列。最外层的select movie_id没有明确指定该字段来源于哪个子查询别名,因此SQLite无法判断该取哪一列的值,触发列名歧义报错。

修复方法

你只需要在最外层查询的movie_id前加任意一个子查询的别名前缀即可,因为你内连接的条件就是xx.movie_id = yy.movie_id,两个字段的值完全一致,任选其一就行,比如选xx.movie_id:

原逻辑修复后的完整代码

select xx.movie_id from (
        (select movie_id,person_id from (
            select id from people where name = "Johnny Depp") as x 
                inner join 
                    stars on x.id = stars.person_id) as xx 
                                
        inner join 
                                    
        (select movie_id,person_id from (
            select id from people where name = "Helena Bonham Carter") as y 
                inner join 
                    stars on y.id = stars.person_id) as yy 
                                    
        on xx.movie_id = yy.movie_id
                    );

更简洁的优化写法

你原来的SQL嵌套层级过多,可以简化为如下写法,可读性和执行效率都更高:

-- 如果需要返回电影名,可额外关联movies表
SELECT DISTINCT s1.movie_id, m.title
FROM stars s1
INNER JOIN stars s2 
    ON s1.movie_id = s2.movie_id
INNER JOIN people p1 
    ON s1.person_id = p1.id AND p1.name = 'Johnny Depp'
INNER JOIN people p2 
    ON s2.person_id = p2.id AND p2.name = 'Helena Bonham Carter'
INNER JOIN movies m 
    ON s1.movie_id = m.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:27:03