簡體   English   中英

mysql如何把單行變成多行?

[英]How to turn a single row to multiple row in mysql?

前任:

“流派”列有一行數據:

+----------------------------+
|            genres          |
+----------------------------+
|   action, adventure, drama |       |
|                            |
+----------------------------+

我想要的 output 將是一個包含以下數據的列:

+------------+
|    genre   | 
+------------+
| action     |
| adventure  | 
| drama      | 
+------------+

我如何在 mysql 中進行操作?

您可以嘗試創建一個拆分 function 如下所示,以通過逗號獲取您期望值的一部分。

架構 (MySQL v5.7)

DELIMITER $$
DROP FUNCTION IF EXISTS `SPLIT_STR` $$
CREATE FUNCTION `SPLIT_STR`(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
) RETURNS varchar(255) CHARSET latin1
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '') $$

DELIMITER ;

然后使用UNION ALL將這些結果組合起來,如下所示

查詢#1

SELECT SPLIT_STR(genres, ',', 1) genre  FROM T 
UNION ALL
SELECT SPLIT_STR(genres, ',', 2) FROM T
UNION ALL
SELECT SPLIT_STR(genres, ',', 3) FROM T;
類型
行動
冒險
戲劇

在 DB Fiddle 上查看

筆記

我建議你重新設計你的表方案,因為它不利於逗號存儲值,你需要轉換為行。

首先,要顯示表格的所有內容,您可以使用 * (這意味着全部)

SELECT * FROM <TableName>;

在此處輸入圖像描述

對於特定列,您可以將其更改為列名,

SELECT <ColumnName> FROM <TableName>;

例如:在我的例子中,我只想顯示名稱的內容。 所以我可以寫

SELECT name FROM users;

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM