2012-09-23 52 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,則直到有投標者纔會在結果中顯示產品。