MySQL 用逗号等组合行值

标签 mysql concatenation

我已经为此苦苦思索了一段时间。主要不是获得解决方案,而是解决方案的工作原理。如果您能解释解决方案的实现方式,那就太好了。

这只是示例数据,我正在处理 5 个带有内联 SELECT 语句的表。谢谢 SQL 大师。

示例表:

CREATE TABLE source
(
  product varchar(20),
  amount decimal
)

CREATE TABLE cat
(
  category varchar(20),
  product varchar(20)
)

插入示例数据:

INSERT INTO source (product, amount) VALUES
('product1', 1.00),
('product2', 2.00),
('product3', 1.50),
('product4', 5.25)

INSERT INTO cat (category, product) VALUES
('Shirts', 'product1'),
('Green Shirt', 'product1'),
('Gadget', 'product1'),
('Food', 'product2'),
('Games', 'product4')

我的试用查询:

DECLARE @categories varchar(200)
SET @categories = NULL

SELECT 
@categories = COALESCE(@categories + ',','') + cat.category
FROM cat

SELECT
DISTINCT source.product,
@categories
FROM cat
JOIN source on source.product = cat.product

输出

PRODUCT     COLUMN_1
product1    Shirts,Green Shirt,Gadget,Food,Games
product2    Shirts,Green Shirt,Gadget,Food,Games
product4    Shirts,Green Shirt,Gadget,Food,Games

期望的输出:

PRODUCT     COLUMN_1
product1    Shirts, Green Shirt, Gadget
product2    Gadget, Food
product4    Games

最佳答案

我认为这就是您使用 GROUP_CONCAT 寻找的内容:

SELECT
  source.product,
  GROUP_CONCAT(cat.category) cats
FROM cat
  JOIN source on source.product = cat.product
GROUP BY source.product

SQL Fiddle Demo

如果您试图在每个类别之间使用“,”,请使用 SEPARATORGROUP_CONCAT。例如:

GROUP_CONCAT(cat.category separator ', ')

关于MySQL 用逗号等组合行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16720129/

相关文章:

python - 加速 Pandas 稀疏数据帧的加载

每个连接的 MySQL 查询限制

php - 接收订单详情和付款确认(电子商务网站)

mysql - SQL 渲染 XML 数据时出现特殊字符乱码

ruby - 为什么我不能连接两个字符串并将它们分配给一个符号?

javascript - 将递归文件夹中的多个缩小的 javascript 文件合并到一个文件中

php - 在 Laravel 中备份 MySQL 表,无需第三方库

php - 如何最好地构造这个MySQL数据库

Delphi XE3 - 无法连接字符串

xml - xslt 连接来自节点的文本