我有一个有四个不同列的表格。它的名字叫“盒子表”。它包含不同盒子的特征。
以下是各列的名称:序列号、盒子高度、盒子宽度、盒子重量。
第一列(序列号)是一个字符串,但它可以在一行中包含多个框,例如:(212,234)。如果一个字符串包含多个框,我想将该字符串拆分为不同的行(框的数量,由逗号数量 + 1 确定)。当我执行此操作时,我希望也为新创建的行复制其他列值。例如
Serial Number: 1,2 | Box Height: 5 | Box Width: 2 | Box Weight: 100
改造后:
Row (1): Serial Number: 1 | Box Height: 5 | Box Width: 2 | Box Weight: 100
Row (2): Serial Number: 2 | Box Height: 5 | Box Width: 2 | Box Weight: 100
我不明白如何开始这个问题。我最多能做的就是从字符串中删除特殊字符。
一个典型的解决方案是生成一个数字列表(通过创建表或使用内联查询),然后使用源数据
JOIN
,使用MySQL字符串函数提取serial_number
的相关部分。
这是一个使用内联查询的解决方案,每个记录最多可以处理 5 个序列(要处理更多序列,您需要使用更多
UNION ALL
来扩展子查询):
SELECT
SUBSTRING_INDEX(
SUBSTRING_INDEX(box.serial_number, ',', num.n),
',',
-1
) new_serial_number,
box.height,
box.width,
box.weight
FROM
(
SELECT 1 n
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
) num
INNER JOIN box
ON CHAR_LENGTH(box.serial_number)
- CHAR_LENGTH(REPLACE(box.serial_number, ',', ''))
>= num.n - 1
这个 DB Fiddle 上的演示以及您的示例数据返回:
| new_serial_number | height | width | weight |
| ----------------- | ------ | ----- | ------ |
| 1 | 5 | 2 | 100 |
| 2 | 5 | 2 | 100 |
请帮忙。如果你查看这个 GOOGLE DRIVE。他们的里面有一个PDF。我的问题很简单。如何修改一行?因为其中一些有 4 种不同的物品。这是一份杂货清单。我正在尝试将其修改为每行一项。那么我怎样才能在 MySQL 中做到这一点呢? PDF 第 2 页显示。我要去做什么。 https://drive.google.com/file/d/1HvmmAQTsA_KXnKR4PL3q3oN2gJFFlN84/view?usp=sharing
只是一个提醒。我正在使用MySQL。 我不明白如何开始这个问题。 但我确实认为它是一个字符串。必须将其分成不同的行。