MySQL是最受歡迎的關(guān)系型數(shù)據(jù)庫(kù)之一,它提供了許多功能,其中之一是能夠使用單個(gè)字段生成多條數(shù)據(jù)。在本文中,我們將介紹如何使用 MySQL 切割字段以生成多個(gè)數(shù)據(jù)。
假設(shè)我們有一個(gè)名為“animals”的表,其中有一個(gè)名為“names”的字段,其中包含多個(gè)動(dòng)物名稱,用逗號(hào)分隔。例如,“dog,cat,fish”。我們想要根據(jù)這個(gè)字段創(chuàng)建一個(gè)新的表“all_animals”,其中每個(gè)動(dòng)物名稱都單獨(dú)成行。
CREATE TABLE all_animals ( id int(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO all_animals (name) SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(names, ',', n.n), ',', -1)) as name FROM animals CROSS JOIN ( SELECT a.N + b.N * 10 + 1 n FROM (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) a JOIN (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) b ON n.n<= LENGTH(animals.names) - LENGTH(REPLACE(animals.names, ',', '')) + 1 ) n WHERE TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(names, ',', n.n), ',', -1))<>'';
這個(gè)代碼塊需要解釋一下:
- 我們創(chuàng)建了一個(gè)名為“all_animals”的新表,其中包含“id”和“name”兩個(gè)字段,其中“id”是自動(dòng)增加的主鍵。
- 然后,我們使用 SELECT 語(yǔ)句從“animals”表中選擇所有名稱。我們使用 TRIM 函數(shù)從名稱中刪除多余的空格,并使用 SUBSTRING_INDEX 函數(shù)切割字符串。
- 我們使用 CROSS JOIN 和 UNION 子句生成一個(gè)名為“n”的虛擬表,該表僅包含 10 個(gè)行,然后使用這個(gè)表生成數(shù)字串。我們?cè)谶@里使用數(shù)字串,以分割名稱字段中的每個(gè)逗號(hào)分隔項(xiàng)。因此,我們可以使用這個(gè)數(shù)字串將單個(gè)組合名稱拆分為單個(gè)動(dòng)物名稱。
- 最后,我們?cè)?WHERE 子句中刪除名稱中的任何空格,然后將行插入“all_animals”表中。
現(xiàn)在我們已經(jīng)成功地使用單個(gè)字段生成多條數(shù)據(jù)。這對(duì)于許多應(yīng)用程序非常有用,如電子商務(wù)網(wǎng)站、社交媒體和博客。希望這篇文章能給你帶來(lái)好處,以便更好地使用 MySQL。
上一篇vue尺寸是什么