#头条创作挑战赛#1.创建测试表及数据–创建一张tb_stu表CREATETABLEtb_user(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(10)COMMENT'人名',c_noVAR
1. 创建测试表及数据信息
-- 创建一张tb_stu表
CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10) COMMENT '人的名字',
c_no VARCHAR(64) COMMENT '持剑ID,以逗号分隔'
);
INSERT INTO tb_user(NAME,c_no) VALUES('蘧伯玉','1,3,5,7');
INSERT INTO tb_user(NAME,c_no) VALUES('高渐离','1,2,4,8,5');
INSERT INTO tb_user(NAME,c_no) VALUES('樗里疾','2,9');
INSERT INTO tb_user(NAME,c_no) VALUES('澹台灭明','1,2');
INSERT INTO tb_user(NAME,c_no) VALUES('钟子期','1,2,6,8,7,3,5');
INSERT INTO tb_user(NAME,c_no) VALUES('柳下惠','2,4,3,5');
INSERT INTO tb_user(NAME,c_no) VALUES('百里奚','1,9');
INSERT INTO tb_user(NAME,c_no) VALUES('阚止','1,6,7');
INSERT INTO tb_user(NAME,c_no) VALUES('汉高祖','1,8,5');
INSERT INTO tb_user(NAME,c_no) VALUES('慕蓉白曜','1,2,3,4,5,7');
INSERT INTO tb_user(NAME,c_no) VALUES('鱼幼薇','7,8,9');
INSERT INTO tb_user(NAME,c_no) VALUES('李峤','6,5');
-- 创建一张剑名
create table tb_sword(
id int primary key AUTO_INCREMENT,
c_name varchar(4)) comment '剑名';
insert into tb_sword(c_name)values('瑶光');
insert into tb_sword(c_name)values('湛卢');
insert into tb_sword(c_name)values('赤霄');
insert into tb_sword(c_name)values('太阿');
insert into tb_sword(c_name)values('七星龙渊');
insert into tb_sword(c_name)values('干蒋');
insert into tb_sword(c_name)values('干将莫邪');
insert into tb_sword(c_name)values('鱼肠');
insert into tb_sword(c_name)values('纯钧');
二张表内容如下:
tb_user
tb_sword
2. 数据拆分及合拼
要求: 应用一条SQL得到tb_user表格中每一个人所持有的剑名(剑名用“|”隔开),即获得如下所示结论
拆卸要求:
1) 先把tb_user表中的c_no按分号分割
2)将分割后c_no里的每个id与tb_sword里的id关系,获得剑名
3) 然后将每一个user相对应的剑名合拼成一个字段名
按段SQL如下所示:
流程1:
每一个user的c_no按分号拆分为相对应的c_id,这种方法需凭借mysql.help_topic表
SELECT a.id,a.name,a.c_no,SUBSTRING_INDEX( SUBSTRING_INDEX( a.c_no, ',', b.help_topic_id 1 ), ',',- 1 ) c_id
FROM tb_user a JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.c_no ) - LENGTH( REPLACE ( a.c_no, ',', '' ) ) 1 )
ORDER BY a.id
结论如下所示:
流程2:关系获得每一个id相对应的剑名
SELECT a2.id,a2.name,a2.c_no,a2.c_id,b2.c_name
FROM (
SELECT a.id,a.name,a.c_no, SUBSTRING_INDEX( SUBSTRING_INDEX( a.c_no, ',', b.help_topic_id 1 ), ',',- 1 ) c_id
FROM tb_user a JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.c_no ) - LENGTH( REPLACE ( a.c_no, ',', '' ) ) 1 )
ORDER BY a.id
) a2, -- a2表即流程1中分割得到的结果
tb_sword b2 WHERE a2.c_id =b2.id -- 关系,等同于inner join(或是join)
结论如下所示
流程3:
将每一个人剑名合并为1个字段名表明,并且用"|" 合乎合拼
SELECT a2.id,a2.name,a2.c_no,
GROUP_CONCAT(b2.c_name SEPARATOR '|' ) sword_name
-- SEPARATOR 特定隔开富,不用默认逗号分隔
FROM (SELECT a.id,a.name,a.c_no,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.c_no, ',', b.help_topic_id 1 ), ',',- 1 ) c_id
FROM tb_user a
JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.c_no ) - LENGTH( REPLACE ( a.c_no, ',', '' ) ) 1 )
ORDER BY a.id) a2,tb_sword b2
WHERE a2.c_id =b2.id
GROUP BY a2.id
结论如下所示:
实现需求
顶级复刻,货到付款,质量保证,对版发货,售后五年,添加 微信:AFZF66 备注:时间圈!
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1032933037@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.dayunb.com/9321.html
如若转载,请注明出处:https://www.dayunb.com/9321.html