1

我有一个类似这样的表:

id
name
datetime
quantity

我想用 SQL 将这些记录从一个表移动到另一个没有数量列的表,插入记录 X 次,其中 X 是数量的值,所以......

id name       datetime    quantity
----------------------------------
5  book-order 15-Mar-2010 3

# becomes

id name       datetime  
------------------------
5  book-order 15-Mar-2010
6  book-order 15-Mar-2010
7  book-order 15-Mar-2010

有没有办法在纯 SQL 中做到这一点?

4

2 回答 2

2

这是一种方法,假设数量不超过 100:

insert into t2(name, datetime)
    select name, datetime
    from t1 join
         (select d1*10+d2 as num
          from (select 0 as n union all select 1 union all select 2 union all select 3 union all select 4 union all
                select 5 union all select 6 union all select 7 union all select 8 union all select 9
               ) d1 cross join
               (select 0 as n union all select 1 union all select 2 union all select 3 union all select 4 union all
                select 5 union all select 6 union all select 7 union all select 8 union all select 9
              ) d2
         ) nums
         on nums.num < t1.qty

如果数量太大,困难的部分是生成一个数字表。

于 2013-01-30T20:48:48.357 回答
1

如果目标表上的 ID 是自动增量字段,您可以考虑使用类似以下查询的内容:

insert into books2 (name, datetime)
select
  name, datetime
from
  books inner join
  (select 0 n union all select 1 union all select 2 union all select 3
   union all select 4 union all select 5 union all select 6 n union all
   select 7 union all select 8 union all select 9) nums
  on books.quantity > nums.n;

这将根据books.quantity 多次选择所有书籍订单,并将它们插入到table books2 中。此查询限制为最多 10 个,但可以扩展。

请参阅此处的工作小提琴。

于 2013-01-30T20:47:18.730 回答