我有一张这样的表
CREATE TABLE `users_customers`(
`user_id` VARCHAR(50) NOT NULL,
`customer_id` VARCHAR(15) NOT NULL,
PRIMARY KEY(`user_id`, `customer_id`),
INDEX user_id_index (`user_id`),
INDEX customer_index (`customer_id`),
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE CASCADE
);
使用数据
users_customers
user_id customer_id
--------------------------
1 1
2 1
1 2
1 3
2 3
...
我想从这个表中查询并生成这样的结果
user_id customers
-------------------------
1 1,2,3
2 1,3
...
我看过concat()函数,但仍然不知道如何反映我的想法。
答案 0 :(得分:1)
使用 GROUP_CONCAT
SELECT user_id,GROUP_CONCAT(customer_id)
FROM users_customers
GROUP BY user_id
<强> Fiddle 强>
答案 1 :(得分:1)
您使用GROUP_CONCAT函数执行此操作。它将对值进行分组并将其作为字符串返回。
所以你的查询就像
SELECT user_id, GROUP_CONCAT(customers)
FROM users_customers GROUP BY user_id
如果您希望按特定顺序排列值,则可以将ORDER BY
添加到GROUP_CONCAT
,或者如果您想要一个不同于逗号的分隔符,则可以添加SEPARATOR
定义。< / p>
如果该字段可能包含重复值而您只需要一次,则还可以使用DISTINCT
添加该列。
SELECT user_id, GROUP_CONCAT(DISTINCT customers ORDER BY customers DESC SEPARATOR ';')
FROM users_customers GROUP BY user_id