具有联合返回错误结果的 MySQL 查询
Posted
技术标签:
【中文标题】具有联合返回错误结果的 MySQL 查询【英文标题】:MySQL query with union returning wrong results 【发布时间】:2013-03-04 00:31:21 【问题描述】:我无法找出执行此 mysql 语句的最佳方法。
第一个表 'friends' 有 userID、friendID 和 status
第二个表'users'有firstName、lastName、userID
第三个表'users_temp'有tempUserID,tempUserName
我希望有一个查询从用户 ID 或朋友 ID = 1 的“朋友”中全部提取并加入另一个字段(如果用户 ID = 1,则获取朋友 ID,或者如果朋友 ID = 1,则获取用户 ID)到“用户”/ 'users_temp' 其中 userID = users.userID 并离开加入 users_temp(如果存在)。
现在我有这个,但它总是返回错误的结果。它返回的用户 ID 也必须是唯一的,所以我只为每个用户返回 1 个(因为这是一个朋友列表)
SELECT users.userid,
users.fbid AS fbID,
users.firstname AS firstName,
users.lastname AS lastName,
users.phonenumber AS phoneNumber,
users.avatar AS avatar,
users_temp.tempusername AS tempUserName,
status,
friendid
FROM users
JOIN (SELECT friendid,
userid,
status
FROM friends
WHERE friendid = $userid
AND ( ( status != 2 )
AND ( status != 3 ) )
UNION ALL
SELECT friendid,
userid,
status
FROM friends
WHERE userid = $userid
AND ( ( status != 2 )
AND ( status != 3 ) )) foo
ON users.userid = foo.userid
LEFT JOIN users_temp
ON users.userid = users_temp.tempuserid
我创建了一个 sqlfiddle,希望能进一步解释我的 sql 设置
http://sqlfiddle.com/#!2/690c3/4
任何帮助将不胜感激!
谢谢,
韦斯
【问题讨论】:
嗯.. 试试UNION
而不是UNION ALL
?
运气不好。
【参考方案1】:
据我所知,问题可能是您在 unionall 查询的第二部分使用不正确的字段进行连接
请尝试以下方法
SELECT users.userid,
users.fbid AS fbID,
users.firstname AS firstName,
users.lastname AS lastName,
users.phonenumber AS phoneNumber,
users.avatar AS avatar,
users_temp.tempusername AS tempUserName,
status
FROM users
JOIN (SELECT friendid AS joinid,
userid AS otherid,
status
FROM friends
WHERE friendid = 1
AND ( ( status != 2 )
AND ( status != 3 ) )
UNION ALL
SELECT userid AS joinid,
friendid AS otherid,
status
FROM friends
WHERE userid = 1
AND ( ( status != 2 )
AND ( status != 3 ) )) foo
ON users.userid = foo.otherid
LEFT JOIN users_temp
ON users.userid = users_temp.tempuserid
编辑:更改了 unionall 的第二个子查询的列顺序。您真的需要主查询中的friendid 列吗?或者其他人会做吗?
【讨论】:
不走运。如果有帮助,我将数据库的结构放在这里sqlfiddle.com/#!2/690c3/4以上是关于具有联合返回错误结果的 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章