我试着写一个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
答案 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
指定它。
在这里演示: