mysql CONCAT,CONCAT_WS,GROUP_CONCAT
CONCAT()
CONCAT()函数用于将多个字符串连接成一个字符串。
SELECT CONCAT('1', '2'); -- 12 SELECT CONCAT('1', ' ','2'); -- 1 2 SELECT CONCAT('1', NULL,'2'); -- null
CONCAT_WS
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。
SELECT CONCAT_WS('_','1','2'); -- 1_2 SELECT CONCAT_WS('_','1', ' ','2'); -- 1_ _2 SELECT CONCAT_WS('_','1', NULL,'2'); -- 1_2
GROUP_CONCAT
GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。
SELECT one_name, GROUP_CONCAT(two_id) FROM one GROUP BY one_name
示例:
CREATE TABLE `t_orders` ( `id` int NOT NULL AUTO_INCREMENT, `userId` int DEFAULT NULL, `orderId` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; INSERT INTO `t_orders` VALUES ('1', '1', '100'); INSERT INTO `t_orders` VALUES ('2', '1', '101'); INSERT INTO `t_orders` VALUES ('3', '1', '102'); INSERT INTO `t_orders` VALUES ('4', '2', '200'); INSERT INTO `t_orders` VALUES ('5', '2', '201'); INSERT INTO `t_orders` VALUES ('6', '3', '300');
-- 普通查询 select userId as 用户ID, orderId as 订单 from t_orders; -- 以 userId 分组,把 orderId 字段的值打印在一行,逗号分隔 select userId as 用户ID, group_concat(orderId) as 订单 from t_orders group by userId; -- 以 userId 分组,把 orderId 字段的值打印在一行,分号分隔 select userId as 用户ID, group_concat(orderId separator ';') as 订单 from t_orders group by userId; -- 以 userId 分组,把 orderId 字段的值打印在一行,降序排列 select userId as 用户ID, group_concat(orderId order by orderId desc) as 订单列表 from t_orders group by userId;
参考: http://www.mybatis.cn/archives/847.html