MySQL查询从2个表混淆

时间:2014-01-08 10:47:19

标签: mysql sql join multiple-tables

我有一个想要运行的查询,但没有返回预期的结果。

所以我的表就像这样

users (has two columns)
user_id,name

users_archive (has the same two columns) 
user_id,name

我想基本上运行一个查询,该查询列出了相应表中的user_id,其中用户名与我正在搜索的内容相匹配

对于我的示例,我在users_archive中有一个名为MikeBOSS的用户,user_id为123(用户表中没有MikeBOSS)

SELECT users.user_id, users_archive.user_id 
FROM users 
LEFT JOIN users_archive ON users_archive.name='MikeBOSS' 
WHERE users.name='MikeBOSS';

但是没有结果

SELECT users.user_id, users_archive.user_id 
FROM users, users_archive 
WHERE (users.name='MikeBOSS' OR users_archive.name='MikeBOSS');

返回来自users表的一堆不正确的结果。

有人可能会指出我正确的方向吗?

4 个答案:

答案 0 :(得分:1)

你不想要一个JOIN,你想要一个UNION。看

SELECT users.user_id, 'users'
FROM users 
WHERE users.name='MikeBOSS'
UNION 
SELECT users_archive.user_id, 'archive'
FROM users_archive
WHERE users_archive.name='MikeBOSS';

答案 1 :(得分:0)

连接条件通常链接两个表。你的不是:

ON users_archive.name='MikeBOSS' 

链接两个表的连接条件可能类似于:

ON users.name = users_archive.name

如果您想知道它返回的行数,请分别检查每个表。 name = 'MikeBoss'表中是否还有users_archive行?

答案 2 :(得分:0)

更改

SELECT users.user_id, users_archive.user_id 
FROM users 
LEFT JOIN users_archive ON users_archive.name='MikeBOSS' 
WHERE users.name='MikeBOSS';

SELECT users.user_id, users_archive.user_id 
FROM users 
LEFT JOIN users_archive ON users.name = users_archive.name WHERE users.name='MikeBOSS';

答案 3 :(得分:0)

如果2个表之间没有关系,可能会有效。使用左连接可以从一个表中进行记录,即使它不存在于其他表中。

SELECT users.user_id, users_archive.user_id 
FROM users 
LEFT JOIN users_archive ON users.userid = users_archive.userid and users.name = users_archive.name
WHERE users.name='MikeBOSS';