MySQL连接两个不相关查询的结果

Posted

技术标签:

【中文标题】MySQL连接两个不相关查询的结果【英文标题】:MySQL join results of two unrelated queries 【发布时间】:2017-10-29 04:32:40 【问题描述】:

我是一个新手 SQL-er,试图将两个不相关查询的结果连接到一个表中。我在 SO 中使用 JOIN、UNION、嵌套 SELECT 语句等查看了许多示例,但似乎没有一个有效。这是我的表格和相关列:

用户: 用户 ID |用户名

活动: 事件ID |用户 ID | user_ID_affected

情况是多人游戏。我要做的是根据发生的每个事件的用户 ID“查找”用户名。我可以根据事件中的事件从用户那里查找用户名,但不能同时从用户那里获取用户名。

这是我的两个单独工作的查询:

SELECT Events.event_ID AS eventID, Events.user_ID AS userID, Users.username
AS username1, Events.user_ID_affected AS userIDAffected
FROM Events
LEFT JOIN Users ON Events.user_ID = Users.user_ID
WHERE Events.event_ID > 11337
ORDER BY Events.event_ID ASC;

和:

SELECT Users.username AS usernameAffected
FROM Users
WHERE Users.user_ID = Events.user_ID_affected;

但尽我所能,我无法将它们结合起来。我希望的输出是这样的列的结果:

事件ID |用户名 |用户名1 |用户 ID 受影响 |用户名受影响

有什么想法吗?

【问题讨论】:

both work individually ...您的第二个查询甚至不会运行。 你是对的 Tim - 现在我找不到有效的查询 :( 但逻辑是相同的:从用户表中查找用户名,其中用户 ID 与该事件中的用户 ID 匹配。 您能否向我们展示示例数据以及您的预期输出表? 【参考方案1】:

我认为您需要在这里加入两次Users 表,一次用于执行操作的用户,第二次用于接收操作的用户:

SELECT
    e.event_ID AS eventID,
    e.user_ID AS userID,
    u1.username AS username,
    e.user_ID_affected AS userID_affected,
    u2.username AS username_affected
FROM Events e
LEFT JOIN Users u1
    ON e.user_ID = u1.user_ID
LEFT JOIN Users u2
    ON e.user_ID_affected = u2.user_ID
WHERE
    e.event_ID > 11337
ORDER BY
    e.event_ID ASC;

【讨论】:

以上是关于MySQL连接两个不相关查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL的连接查询

mysql左连接查询结果不准确

buffer的相关小知识

请教大家!mysql查询结果,过滤重复数据?

mysql命令总结

mysql和连接相关的timeout