【问题标题】:Ambiguous column name error for user_iduser_id 的列名不明确错误
【发布时间】:2017-04-05 21:00:01
【问题描述】:

我的用户表有列 user_id, email 我的邀请表有列 invite_idrequest_iduser_idsent_time

当我运行以下查询时,我将两个表连接为 1,这是预期的。

'SELECT * FROM users INNER JOIN invites ON users.user_id = invites.user_id'

但是,当我运行以下查询时,

'SELECT user_id FROM users INNER JOIN invites ON users.user_id = invites.user_id'

我收到以下错误

OperationalError: (sqlite3.OperationalError) ambiguous column name: user_id [SQL: 'SELECT user_id FROM users INNER JOIN invites ON users.user_id = invites.user_id']

任何帮助表示赞赏。

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    我认为信息很清楚。 SQLite 不知道 user_id 来自哪个表。

    一个简单的解决方案是使用表别名来限定列名:

    SELECT u.user_id
    FROM users u INNER JOIN
         invites i
         ON u.user_id = i.user_id;
    

    另一种方法是使用USING而不是ON

    SELECT user_id
    FROM users u INNER JOIN
         invites i
         USING (user_id);
    

    【讨论】:

    • 为什么SELECT * FROM users INNER JOIN invites ON users.user_id = invites.user_id 很好?我想users INNER JOIN invites之后有两列同名user_id吧?
    • @FeiZheng . . .问题是当有 one 列时。 SQLite 不知道它来自哪个表。
    【解决方案2】:

    您需要使用如下表名限定列名,因为查询中涉及的两个表具有相同的列名

    SELECT `users`.user_id 
    FROM users 
    INNER JOIN invites ON `users`.user_id = invites.user_id
    

    【讨论】:

      【解决方案3】:

      这意味着您需要明确要显示哪个 user_id 列。即使它们已加入,也不能保证它们是相同的。某些类型的连接允许在匹配的一侧使用 NULL 值(例如 LEFT JOIN),因此您需要请求特定值:

      SELECT users.user_id FROM users INNER JOIN invites ON users.user_id = invites.user_id
      

      【讨论】:

        猜你喜欢
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多