2017-10-29 52 views
0

我是一个尝试将两个不相关查询的结果连接到一个表中的新手SQL-er。我在使用JOIN,UNION,嵌套的SELECT语句等方面看过很多例子,但似乎没有任何工作。以下是我的表格和相关列:MySQL连接两个无关查询的结果

用户: user_ID |用户名

活动: event_ID | user_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; 

但尝试,因为我可能,我不能将它们合并。我期望的输出是这样的列的结果:

eventID | userID | username1 | userIDaffected | usernameAffected

有什么想法?

+0

'都工作individually' ..你的第二个查询将不会运行。 –

+0

你是对的Tim - 现在我找不到工作的查询:(但逻辑是一样的:从Users表中查找用户名,其中userID与该事件的用户ID匹配。 – Arj

+0

您能向我们展示示例数据以及您的预期产出表? –

回答

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;