MySQL中怎么实现行转列操作
本篇文章给大家分享的是有关MySQL中怎么实现行转列操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
表的基本结构
改造前表结构:
CREATE TABLE orders(
orders_id INT NOT NULL AUTO_INCREMENT COMMENT '订单ID',
good_ids VARCHAR(200) NOT NULL COMMENT '商品ID字符串',
PRIMARY KEY(orders_id)
);
INSERT INTO orders VALUES(NULL, '1,2,3,4,5');
INSERT INTO orders VALUES(NULL, '11,12,13,14,15');
INSERT INTO orders VALUES(NULL, '21,22,23,24,25');
改造后表结构:
-- orders 表不变
CREATE TABLE orders(
orders_id INT NOT NULL AUTO_INCREMENT COMMENT '订单ID',
good_ids VARCHAR(200) NOT NULL COMMENT '商品ID字符串',
PRIMARY KEY(orders_id)
);
-- 新增订单商品表
CREATE TABLE order_goods(
order_goods_id INT NOT NULL AUTO_INCREMENT COMMENT '订单商品ID',
orders_id INT NOT NULL COMMENT '订单ID',
goods_id INT NOT NULL COMMENT '商品ID',
PRIMARY KEY(order_goods_id)
);
实现行转列
这边我们需要借助一个有着ID连续的表(mysql.help_topic)来做关联,以至于能够划分出商品ID。
SELECT o.orders_id,
SUBSTRING_INDEX(SUBSTRING_INDEX(o.good_ids, ',', h.help_topic_id), ',', -1)
FROM orders AS o
JOIN mysql.help_topic AS h
ON h.help_topic_id <= -="" where="" help_topic_id=""> 0
ORDER BY o.orders_id;
分解SQL进行解释
这边我们的目的是获得商品ID字符串中第二个商品ID。
使用 逗号(',') 分割 good_ids 查看前两个元素(good_id):
SELECT o.orders_id,
SUBSTRING_INDEX(o.good_ids, ',', 2)
FROM orders AS o;
+-----------+-------------------------------------+
| orders_id | SUBSTRING_INDEX(o.good_ids, ',', 2) |
+-----------+-------------------------------------+
| 1 | 1,2 |
| 2 | 11,12 |
| 3 | 21,22 |
+-----------+-------------------------------------+
通过上面获得的前两个元素的字符串,再次进行 逗号(',') 分割,并获得最后一个元素。
SELECT o.orders_id,
SUBSTRING_INDEX(
SUBSTRING_INDEX(o.good_ids, ',', 2),
',',
-1
) AS good_id
FROM orders AS o;
+-----------+---------+
| orders_id | good_id |
+-----------+---------+
| 1 | 2 |
| 2 | 12 |
| 3 | 22 |
+-----------+---------+
最终的SQL只是将指定的第二个元素,变成动态改变的。而动态的改变的数字就是通过关联mysql.help_topic来实现的
小提示:这里使用mysql.help_topic的原因是它有从0到629连续不断的help_topic_id。当然你也可以自己创建一个表并且插入连续不断的数据来作为关联表。
SELECT o.orders_id,
SUBSTRING_INDEX(SUBSTRING_INDEX(o.good_ids, ',', h.help_topic_id), ',', -1) AS good_id
FROM orders AS o
JOIN mysql.help_topic AS h
ON h.help_topic_id <= -="" where="" help_topic_id=""> 0
ORDER BY o.orders_id;
+-----------+---------+
| orders_id | good_id |
+-----------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 2 | 15 |
| 2 | 11 |
| 2 | 12 |
| 2 | 13 |
| 2 | 14 |
| 3 | 22 |
| 3 | 23 |
| 3 | 24 |
| 3 | 25 |
| 3 | 21 |
+-----------+---------+
以上就是MySQL中怎么实现行转列操作,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341