假设我有一个mySQL表,其结构如下:
mysql> select * from things_with_stuff;
+----+---------+----------+
| id | counter | quantity |
+----+---------+----------+
| 1 | 101 | 1 |
| 2 | 102 | 2 |
| 3 | 103 | 3 |
+----+---------+----------+
我的目标是“扩展”表格,所以我最终得到的结果是:
mysql> select * from stuff;
+----+---------+
| id | counter |
+----+---------+
| 1 | 101 |
| 2 | 102 |
| 3 | 102 |
| 4 | 103 |
| 5 | 103 |
| 6 | 103 |
+----+---------+
我想只使用mysql进行“扩展”。请注意,我最终每个数量和每个计数器都有一行。有什么建议?存储过程不是一个选项(我知道它们提供while循环)。
谢谢!
答案 0 :(得分:2)
只要some_large_table
的长度大于或等于quantity
中的最大things_with_stuff
,以下内容即可实现。例如,让some_large_table
成为数据仓库中的一个重要事实表。
SELECT @kn:=@kn+1 AS id, counter
FROM (SELECT @kn:=0) k, things_with_stuff ts
INNER JOIN (
SELECT @rn:=@rn+1 AS num
FROM (SELECT @rn:=0) t, some_large_table
) nums ON num <= ts.quantity;
答案 1 :(得分:0)
假设quantity
有最大值,您可以这样做:
INSERT INTO things SELECT counter FROM things_with_stuff WHERE quantity > 0;
INSERT INTO things SELECT counter FROM things_with_stuff WHERE quantity > 1;
INSERT INTO things SELECT counter FROM things_with_stuff WHERE quantity > 2;
--... and so on until the max.
这有点像黑客但它应该可以胜任。
如果订购很重要,您可以在事后进行清理。
答案 2 :(得分:0)
我有时在数据库中有一个名为num
(数字)的表,其中包含一列i
,填充了1到1000000之间的所有整数。制作这样的表并填充它并不难。
如果stuff.id
自动递增,您可以使用此功能:
INSERT INTO stuff
( counter )
SELECT ts.counter
FROM things_with_stuff AS ts
JOIN num
ON num.i <= ts.quantity