2012-02-23 43 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

相关问题