从不同表MySQL的乘法行中选择一行中的数据

时间:2018-01-24 09:14:37

标签: mysql

之前我需要使用MSSQL帮助,但现在我必须在其他机器上使用MySQL。  我有桌子:

----------    ----------    ----------
| offers |    |  bids  |    | users  |
----------    ----------    ----------
id            id            id
....          offer_id      first_name
....          user_id       last_name
              ....          .....

现在我需要为每个商品ID分配用户的姓氏和名字

offers.id = bids.offers_id and bids.user_id = users.id

示例:

     offers                   bids                   users
------------------    ----------------------     ----------------
|id| ...| ....|       |id| offer_id| user_id|    |id| first_name| last_name|
------------------    -----------------------     --------------------------
|1 | ...|.....|       |1 |    1    |    2   |    | 2| Peter     | Jackson  |
|2 | ...|.....|       |2 |    1    |    3   |    | 3| Adam      | Black    |
                      |3 |    1    |    6   |    | 4| Roy       | Wright   |
                      |4 |    2    |    5   |    | 5| Eva       | Cekovsky |
                      |5 |    2    |    7   |    | 6| Martin    | Tyson    |
                                                 | 7| Vera      | Vornel   |

输出应该是这样的

  offer_id                   full_name
--------------------------------------------------------------
|   1      |    Peter Jackson, Adam Black, Martin Tyson      |
--------------------------------------------------------------
|   2      |    Eva Cekowsky, Vera Vornel                    |
--------------------------------------------------------------

我可以使用CONCAT轻松地使用名字连接姓氏,如果每个数据都在同一个表中,那么这样做,但是,我无法弄明白。试图使用GROUP_CONCAT(因为MySQL中没有STUFF)但没有太大的成功。

1 个答案:

答案 0 :(得分:1)

您需要先连接这三个表,然后对两列进行nconcactenten并在GROUP_CONCAT中传递此表达式。

SELECT  b.offer_id,
        GROUP_CONCAT(CONCAT(c.first_name, ' ', c.last_name)) as Full_name
FROM    offers a
        INNER JOIN bids b
            ON a.id = b.offer_id
        INNER JOIN users c
            ON b.user_id = c.id
GROUP   BY b.offer_id