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 に基づいてすべての書籍の注文が複数回選択され、テーブル books2 に挿入されます。このクエリは最大 10 に制限されていますが、拡張できます。

ここで作業フィドルを参照してください。

于 2013-01-30T20:47:18.730 に答える