2012-02-23 79 views
0

我有兩個表:如何在Mysql中執行一個查詢以獲取用戶名和相同的查詢以從同一用戶表中獲取另一個用戶名?

Users       Mail 
-------      ------ 
ID | Username     ID | UserID | SenderID | Something 
---------------    --------------------------------------------------- 
1 | A       1 | 2  | 1   | Becoming Mad with SQL 
2 | B       2 | 3  | 4   | Mee too 

我想這一點:

SELECT * 
a.userid, a.senderid, a.something, 
b.username 
FROM 
mail a 
LEFT JOIN users b on b.id=a.senderid 
WHERE 
a.id='1' 

輸出爲/相似:

a.Userid | a.senderid | a.something | b.username 
-------------------------------------------------- 
2  | 1   | becoming.. | A 

我的預期輸出是這樣的(用戶名B和A的一排):

Userid | senderid | something | username | Username of UserID 
--------------------------------------------------------------- 
2  | 1  | becoming..| A  | B 

如何在同一個查詢中獲取UserID及其用戶名?因爲我已經有left join users b on b.id=a.senderid

回答

2
SELECT a.userid, 
     a.senderid, 
     a.something, 
     b.username, 
     c.username 
FROM mail a 
     LEFT JOIN users b ON b.id = a.senderid 
     JOIN  users c ON c.id = a.UserID 
WHERE a.id='1' 
2

使用用戶表的兩個副本,一個用於發件人,一個用於用戶。

SELECT a.userid, 
      a.senderid, 
      a.something, 
      b.username, 
      c.username 
    FROM mail a, 
     users b, 
     users c 
    WHERE a.id='1' 
    AND b.id=a.senderid 
    AND c.id=a.Userid 

確保你把索引你的表有太多的郵件的ID列和senderid用戶和用戶ID列 - 他們會幫助加快速度。

+0

哦,我剛剛看到以前的答案 - 這兩個都做(幾乎)相同的事情。大多數人喜歡JOIN符號更多,但我更習慣於另一個,因爲它是我從我正在從事的項目上的最後一名DBA繼承的......差異在於「LEFT JOIN」將包含所有項目在左側表格中,無論右側表格中是否有匹配的條目。 – Poodlehat 2012-02-23 19:55:21

相關問題