首页 > 解决方案 > MariaDB 10.0:根据列值将 1 行拆分为多行

问题描述

我有一个看起来像这样的表:

| id  | item   | count |
| --- | ------ | ----- |
| 1   | item a | 3     |
| 2   | item b | 2     |
| 3   | item c | 4     |

如何查询数据库以便每个计数显示 1 行?即像这样:

| id  | item   | count |
| --- | ------ | ----- |
| 1   | item a | 3     |
| 1   | item a | 3     |
| 1   | item a | 3     |
| 2   | item b | 2     |
| 2   | item b | 2     |
| 3   | item c | 4     |
| 3   | item c | 4     |
| 3   | item c | 4     |
| 3   | item c | 4     |

如果有帮助,我创建了一个数据库小提琴:https ://www.db-fiddle.com/f/wRZgBYkDM18c5fk7tgkBkA/0

标签: mysqlmariadb

解决方案


下面的查询很丑但有效:

SELECT id, item, count 
FROM (
   SELECT @curRow := @curRow + 1 AS row_number FROM mytable 
   INNER JOIN (SELECT @curRow := 0) AS ROW 
   ON @curRow < (SELECT max(count) from mytable) 
) AS B LEFT JOIN mytable C ON B.row_number <= C.count

注意:仅当表中的记录总数 => max(count) 时,它才会返回正确的数据。

在此处的答案中找到原始方法


推荐阅读