user_id的模糊列名称错误

时间:2017-04-05 21:00:02

标签: sql sqlite

我的用户表包含列 user_idemail 我的邀请表有列 invite_id request_id user_id sent_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']

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:3)

我认为这个消息很清楚。 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);

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

这意味着您需要具体了解要显示的 user_id列。尽管他们加入了并不能保证他们是完全相同的。某些类型的联接在匹配的一侧允许NULL值(例如LEFT JOIN),因此您需要询问特定值:

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