2017-10-29 64 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;