How can SQL create duplicate records?

前端 未结 3 656
再見小時候
再見小時候 2020-12-20 18:22

I was having a look at this question: Getting random value from a SQLite table and it got me wondering if one can duplicate records using SQL. More specifically, is there a

相关标签:
3条回答
  • 2020-12-20 18:41

    What SQL dialect and version? It can eaily be done with a recursive CTE.

    WITH cte AS (
        SELECT id, name, count FROM tbl
        UNION ALL
        SELECT id, name, count-1 FROM cte WHERE count>1
    )
    SELECT id, name FROM cte
    
    0 讨论(0)
  • 2020-12-20 18:52

    You can use a "numbers" table (it's handy for various operations):

    CREATE TABLE num
    ( i UNSIGNED INT NOT NULL
    , PRIMARY KEY (i)
    ) ;
    
    INSERT INTO num (i)
    VALUES
      (1), (2), ..., (1000000) ;
    

    Then:

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

    Warning: There is of course a limitation on this approach. The query will not produce all the wanted rows, as soon as you have a value in the count column that exceeds the maximum value stored in the Numbers table. If the values in the count column are unbounded, then only an iterative or recursive solution (like the other two answers) can work.

    0 讨论(0)
  • 2020-12-20 18:52

    This can be done using a recursive CTE:

    ;WITH CTE_Data as (
        select id=1, name='Anne',[COUNT]=3
        union select id=2, name='Joe',[COUNT]=2
    ),
    CTE_List as (
        select
            id,
            name,
            ind=1
        from CTE_Data
        union all
        select
            l.id,
            l.name,
            ind=ind+1
        from CTE_List l
            join CTE_Data d on l.id = d.id
        where 
            l.ind < d.[count]
    )
    select id,name from CTE_List
    order by id,ind
    

    NOTE: CTE_List is the interesting one, CTE_Data is just the source data for testing.

    0 讨论(0)
提交回复
热议问题