在逗号中具有相同ID的MYSQL查询记录

时间:2016-12-02 08:03:45

标签: mysql

我试着写一个mysql查询。我的表格结构如下:

===========================
tender_id | supplier_name
===========================
 160001       Tata
 160005       Wilsons Limited
 160008       Tilkom LTD
 160008       DULUB LLC
 160008       DULUB LLC
============================

现在我需要一个查询的帮助,该查询应该产生以下结果,即当一个tender_id有多个supplier_name时,它应该带有一个逗号。我不确定我是否可以通过查询实现此目的。我知道从PHP脚本得到这个结果,但只是想知道我是否可以使用mysql查询执行此操作:

====================================
tender_id | supplier_name
====================================
 160001      Tata
 160005      Wilsons Limited
 160008      Tilkom LTD, DULUB LLC
====================================

我从下面的查询开始:

SELECT tender_id, supplier_name FROM `quotation_items` group by tender_id, supplier_name

3 个答案:

答案 0 :(得分:2)

您需要使用GROUP CONCAT。您的查询应该是这样的:

SELECT tender_id, GROUP_CONCAT(DISTINCT supplier_name SEPARATOR ', ')
FROM `quotation_items` 
GROUP BY tender_id;

为避免重复名称,只需在GROUP_CONCAT函数中添加DISTINCT关键字。

答案 1 :(得分:1)

SELECT * FROM my_table;

结果:

+-----------+-------------------+
| tender_id | supplier_name     |
+-----------+-------------------+
| 160001    | Tata              |
| 160005    | Wilsons Limited   |
| 160008    | Tilkom LTD        |
| 160008    | DULUB LLC         |
+-----------+-------------------+

试试这个:

SELECT 
    tender_id, 
    GROUP_CONCAT(supplier_name SEPARATOR ", ") concated_field
FROM my_table
GROUP BY tender_id;

结果:

+-----------+-------------------------+
| tender_id | concated_field           |
+-----------+-------------------------+
| 160001    | Tata                    |
| 160005    | Wilsons Limited         |
| 160008    | Tilkom LTD, DULUB LLC   |
+-----------+-------------------------+

答案 2 :(得分:0)

您应该在GROUP BY单独上执行tender_id,并使用GROUP_CONCAT将供应商汇总到CSV列表中:

SELECT tender_id, GROUP_CONCAT(DISTINCT supplier_name) AS supplier_name
FROM quotation_items
GROUP BY tender_id

请注意GROUP_CONCAT的默认分隔符是逗号,但如果您想要另一个,可以使用SEPARATOR指定它。

在这里演示:

SQLFiddle