我的用户表包含列
user_id
,email
我的邀请表有列
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']
任何帮助表示感谢。
答案 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