2012-09-23 120 views
2

我有一个有趣的挑战...我有两个表,productsusersMySQL左连接多行

products包含2列user_idcurrent_bidder,它们保存users表中的两个不同的ID。

我想从products中选择所有列,并从users表中选择每个user_idcurrent_bidder的名称和等级。

本质上,我试图从连接表上的两个不同行中选择列,同时消除他们的名字。

任何帮助将不胜感激。

回答

4

加入到用户表两次,并给每个副本一个不同的别名。事情是这样的:

select p.name, p.weight, owner.name, bidder.name 
from product p 
join user owner 
on  ... 
join user bidder 
on  ... 
+0

更清楚'选择p.blah作为pblah,q.blah作为qblah'因为OP也在问清楚 –

+0

好建议@LuisSiquot。更新。 –

0

的很好的方式,以避免列之间的模糊是在其上添加一个ALIAS

SELECT a.*,     -- selects all records from products 
     b.name AS user_name, -- user_name is an alias of users.name (user_id) 
     c.name AS bidder_name -- user_name is an alias of users.name (current_bidder) 
FROM products a 
     LEFT JOIN users b 
      ON a.user_id = b.id 
     LEFT JOIN users c 
      ON a.current_bidder = c.id 

为什么我用LEFT JOIN是因为我认为有些产品没有bidder但原因。如果使用INNER JOIN,则直到有投标者才会在结果中显示产品。