您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關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中怎么實現行轉列操作,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。