MySQL左连接多行

时间:2012-09-23 23:49:25

标签: mysql sql join

我遇到了一个有趣的挑战......我有两个表,productsusers

products包含2列,user_idcurrent_bidder,其中包含users表中的两个不同的ID。

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

基本上,我正在尝试从连接表上的两个不同行中选择列,同时消除其名称的歧义。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

两次加入用户表,并为每个副本提供不同的别名。像这样:

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

答案 1 :(得分: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,则产品将永远不会显示在结果上,直到有投标人为止。