Mysql CONCAT,GROUP_CONCAT

本文深入探讨了MySQL中的CONCAT与GROUP_CONCAT函数,详细解释了它们的使用方法、语法特性以及在实际数据库操作中的应用示例,帮助读者理解如何有效组合和聚合字符串数据。
-- 初始化临时表以及数据
CREATE TEMPORARY TABLE IF NOT EXISTS data1
(
	Id INT NOT NULL,
	L1 VARCHAR(36) NULL,
	L2 VARCHAR(36) NULL,
	adt_redundancy VARCHAR(255) NULL
);

CREATE TEMPORARY TABLE IF NOT EXISTS templancode
(
	CultureCode VARCHAR(20) not NULL
);

CREATE TEMPORARY TABLE IF NOT EXISTS templanlike
(
	itemid VARCHAR(36) NULL,
	CultureCode VARCHAR(20) NULL,
	ItemContent VARCHAR(100) NULL
);

-- 语言种类表
TRUNCATE TABLE templancode;
-- 多语言表
TRUNCATE TABLE templanlike;
-- 业务数据表
TRUNCATE TABLE data1;

INSERT INTO templancode VALUES('zhCN'),('enUS'),('deDE');
INSERT INTO templanlike VALUES('z1','zhCN','语文'),('z1','enUS','Chinese'),('z1','deDE','Sprachen.');
INSERT INTO templanlike VALUES('z2','zhCN','数学'),('z2','enUS','Math'),('z2','deDE','Mathe.');
INSERT INTO templanlike VALUES('z3','zhCN','英语'),('z3','enUS','English'),('z3','deDE','Englisch.');

INSERT INTO data1(id,L1,L2) VALUES(1,'z1','z2'),(2,'z3',''),(3,'','');

SELECT * FROM templancode; SELECT * FROM templanlike; SELECT * FROM data1;

-- 将Key为z1的多语言内容转换为Json字符
SELECT GROUP_CONCAT(CONCAT('"',p3.CultureCode,'":"',
	 (SELECT p4.ItemContent FROM templanlike AS p4 
		WHERE p4.CultureCode=p3.CultureCode AND p4.itemid='z1'),'"')) as z1lan
FROM templancode as p3;

在这里插入图片描述

-- 拼接业务表字段L1的多语言内容
SELECT p0.Id,p0.L1,p0.L2,
		(SELECT GROUP_CONCAT(CONCAT('"',p1.CultureCode,'":"',
	 (SELECT p2.ItemContent FROM templanlike AS p2 
		WHERE p2.CultureCode=p1.CultureCode AND p2.itemid=p0.L1),'"'))
		FROM templancode as p1) as L1Language
FROM data1 as p0

在这里插入图片描述

-- 更新多语言冗余字段
UPDATE data1 SET adt_redundancy=CONCAT(
'"L1":{',
(SELECT GROUP_CONCAT(CONCAT('"',p1.CultureCode,'":"',
	 ifnull((SELECT p2.ItemContent FROM templanlike AS p2 
		WHERE p2.CultureCode=p1.CultureCode AND p2.itemid=data1.L1),''),'"'))
		FROM templancode as p1)
,'}'
);

UPDATE data1 SET adt_redundancy=CONCAT(adt_redundancy,
',"L2":{',
(SELECT GROUP_CONCAT(CONCAT('"',p1.CultureCode,'":"',
	 ifnull((SELECT p2.ItemContent FROM templanlike AS p2 
		WHERE p2.CultureCode=p1.CultureCode AND p2.itemid=data1.L2),''),'"'))
		FROM templancode as p1)
,'}'
);

SELECT * from data1;

-- 改代码块涉及到的临时表不能在一同语句中重复使用,可以创建实体表进行执行
/*
UPDATE data1 SET adt_redundancy=CONCAT(
'{"L1":',
(SELECT GROUP_CONCAT(CONCAT('"',p1.CultureCode,'":"',
	 (SELECT p2.ItemContent FROM templanlike AS p2 
		WHERE p2.CultureCode=p1.CultureCode AND p2.itemid=data1.L1),'"'))
		FROM templancode as p1)
,'}',
'{"L2":',
(SELECT GROUP_CONCAT(CONCAT('"',p3.CultureCode,'":"',
	 (SELECT p4.ItemContent FROM templanlike AS p4 
		WHERE p4.CultureCode=p1.CultureCode AND p4.itemid=data1.L2),'"'))
		FROM templancode as p3)
,'}'
);
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值