一尘不染

SQL如何创建重复记录?

sql

我正在看一个问题:从SQLite表获取随机值,这使我想知道是否可以使用SQL复制记录。更具体地说,有没有一种可以转换这些记录的构造:

id| name| count
---------------
 1| Anne|     3
 2|  Joe|     2

进入:

id| name
--------
 1| Anne
 1| Anne
 1| Anne
 2|  Joe
 2|  Joe

后者中的AnneJoe记录的计数与count前一组记录中的对应值匹配。

可以用SQL完成吗?如果是这样,怎么办?

编辑:

Lucero问什么SQL方言?任何真的,但理想情况下,最不可知论的方法都是最好的。

另一个编辑:

是否可以在sqlite中的单个SQL语句中完成?


阅读 167

收藏
2021-03-10

共1个答案

一尘不染

您可以使用“数字”表(适用于各种操作):

CREATE TABLE num
( i UNSIGNED INT NOT NULL
, PRIMARY KEY (i)
) ;

INSERT INTO num (i)
VALUES
  (1), (2), ..., (1000000) ;

然后:

SELECT 
    t.id, t.name
FROM 
        tableX AS t
    JOIN
        num
            ON num.i <= t."count"

警告
:这种方法当然有局限性。一旦count列中的值超过Numbers表中存储的最大值,查询将不会生成所有需要的行。如果count列中的值是无界的,则仅迭代或递归解决方案(如其他两个答案)可以工作。

2021-03-10