选择Number Into Multiple Rows

时间:2015-11-19 17:52:17

标签: mysql sql

我在表格上选择一个数字

SELECT * FROM table

我生成的东西看起来像

| column |
|   2    |
|   5    |

我想知道是否有办法将2和5分成2和5的多行。所以基本上

| column |
|   2    |
|   2    |
|   5    |
|   5    |
|   5    |
|   5    |
|   5    |

编辑:正如我的最终目标所指出的那样,我真正想要完成的是一种投票选择,基本上我存储一个人获得的选票数量#并且我想转向#分成多行,这样我就可以将它转移到另一个程序中以供获胜者选择。

3 个答案:

答案 0 :(得分:1)

您可以使用数字(也称为计数)表来执行此操作:

SELECT col
FROM mytable AS t1
INNER JOIN (
  SELECT @rn := @rn + 1 AS num
  FROM (
     SELECT 0 AS n UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0  
            UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0  
            UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 ) AS x
  CROSS JOIN (
     SELECT 0 AS n UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0  
            UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0  
            UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 ) AS y
  CROSS JOIN (SELECT @rn := 0) AS var          
) AS t2 ON t1.col >= t2.num
ORDER BY col

以上查询使用值范围为[1-100]的数字表。如果您的列包含更大的值,则必须使用其他CROSS JOIN操作来增加数字表。

Demo here

答案 1 :(得分:0)

你可以通过重复连接来指数增长它。

但你真正想要完成的是什么?

select
  a.*
from
  table a
  left join table b on 1=1
  left join table c on 1=1

答案 2 :(得分:0)

作为一种解决方法,您可以添加一个包含两列的表格,如:

|Id|Numbers|
|1 |   1   |
|2 |   2   |
|3 |   2   |
|4 |   3   |
|5 |   3   |
|6 |   3   |
|7 |   4   |
|. |  ...  |
|n |   n   |

然后你可以使用

LEFT JOIN ON numbers = column

否则,您需要使用带有循环的存储过程,具体取决于'列'值