在mySQL中从一行生成多行
我在mySQL中找不到任何解决方案。这个有什么功能吗 我试图用子字符串索引来解决这个问题,但我不能用它来解决 我的桌子看起来像这样:在mySQL中从一行生成多行,mysql,Mysql,我在mySQL中找不到任何解决方案。这个有什么功能吗 我试图用子字符串索引来解决这个问题,但我不能用它来解决 我的桌子看起来像这样: +----+-------+--------------+ | id | group | work_place | +----+-------+--------------+ | 1 | TTL | ERG PT TT RK | +----+----------------------+ | 2 | PFF | ER PT TL KK | +--
+----+-------+--------------+
| id | group | work_place |
+----+-------+--------------+
| 1 | TTL | ERG PT TT RK |
+----+----------------------+
| 2 | PFF | ER PT TL KK |
+----+-------+--------------+
我需要这个:
+-------+------------+------+
| group | work_place | No. |
+-------+------------+------+
| TTL | ERP | 1 |
+-------+------------+------+
| TTL | PT | 2 |
+-------+------------+------+
| TTL | TT | 3 |
+-------+------------+------+
| TTL | RK | 4 |
+-------+------------+------+
| PFF | ER | 1 |
+-------+------------+------+
| PFF | PT | 2 |
+-------+------------+------+
| PFF | TL | 3 |
+-------+------------+------+
| PFF | KK | 4 |
+-------+------------+------+
这个怎么样(这只是一个想法,也许有人可以用sql函数来改进它)
这个怎么样(这只是一个想法,也许有人可以用sql函数来改进它)
也许是这样的。。。只是一个想法…
如果“工作地点”列中的值超过5个,则此操作无效。
但是,您可以根据需要编辑查询以支持更多值。
无论如何,正如评论中所建议的,这不是一个好的数据库设计
SELECT id, group, col
FROM (SELECT id,
group,
SUBSTRING_INDEX(work_place, " ", 1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(work_place, " ", 1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 2), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 2), " ", -1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 3), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 3), " ", -1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 4), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 4), " ", -1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 5), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 5), " ", -1) != work_place) tmp
GROUP BY id, group, col
在线示例:可能是这样的。。。只是一个想法…
如果“工作地点”列中的值超过5个,则此操作无效。
但是,您可以根据需要编辑查询以支持更多值。
无论如何,正如评论中所建议的,这不是一个好的数据库设计
SELECT id, group, col
FROM (SELECT id,
group,
SUBSTRING_INDEX(work_place, " ", 1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(work_place, " ", 1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 2), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 2), " ", -1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 3), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 3), " ", -1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 4), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 4), " ", -1) != work_place
UNION ALL
SELECT id,
group,
SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 5), " ", -1) AS col
FROM tablename
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(work_place, " ", 5), " ", -1) != work_place) tmp
GROUP BY id, group, col
在线示例:这就是为什么不应该在RDBMS中存储序列化数据。想想看,我的桌子是这样的。。这是一个非常糟糕的数据库设计。。。想想你的数据你不能在MySQL中本机实现这一点,但是你会发现一些想法,规范化并从中为当前格式创建一个视图会更简单。是否有表,其中包含
work\u place
的所有可能值,这就是为什么不应该在RDBMS中存储序列化数据的原因。想想看,我的桌子是这样的。。这是一个非常糟糕的数据库设计。。。想想你的数据你不能在MySQL中以本机方式实现这一点,但是你会发现一些想法,规范化更简单,并从中为当前格式创建一个视图。是否有包含work\u place的所有可能值的表