在mySQL中从一行生成多行

在mySQL中从一行生成多行,mysql,Mysql,我在mySQL中找不到任何解决方案。这个有什么功能吗 我试图用子字符串索引来解决这个问题,但我不能用它来解决 我的桌子看起来像这样: +----+-------+--------------+ | id | group | work_place | +----+-------+--------------+ | 1 | TTL | ERG PT TT RK | +----+----------------------+ | 2 | PFF | ER PT TL KK | +--

我在mySQL中找不到任何解决方案。这个有什么功能吗

我试图用子字符串索引来解决这个问题,但我不能用它来解决

我的桌子看起来像这样:

+----+-------+--------------+
| 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的所有可能值的表