5

SQL クエリのヘルプが必要です。これを再設計する必要があることはわかっていますが、これは大規模なシステムで行っている小さな修正です :(.

システムには、販売された部品を含む sales というテーブルがあります。

id  | date   | idpart
1   |unixtime|   227
2   |unixtime|   256 

等々..

注文の内容を含むテーブル Orderdetails では、部品が ID 別にリストされ、数量とともに、一意の部品が顧客によって注文されます。

id |idpart | amount
1  | 255   | 4
2  | 265   | 2

さて、私の問題は、クエリを実行して sales テーブルにデータを入力する必要があることですが、idpart を新しい行として追加する必要があることです。結果が次のようになる必要があります。

id  | date   | idpart
1   |unixtime|   227
2   |unixtime|   256 

3   |unixtime|   255
4   |unixtime|   255
5   |unixtime|   255
6   |unixtime|   255
7   |unixtime|   265
8   |unixtime|   265

この問題について助けてくれる人はいますか?

4

1 に答える 1

3

数字の表がある場合、これは簡単です。次のように実行できます。

select id, date, idpart
from sales
union all
select id, date, idpart
from orders o cross
     numbers n
     on n.number <= o.amount

dateこれは、orders テーブルからのものであると想定しています。

あとは、数字の表を生成するだけです。これは MySQL の苦痛です。カレンダー テーブルなど、使用できる別のテーブルがあるかもしれません。それ以外の場合は、自動インクリメント列を含むテーブルに挿入することで作成できます。

他のデータベースでは、row_number()関数を使用してそのようなテーブルをその場で作成できます。しかし、MySQL はこれをサポートしていません。

于 2012-12-19T15:10:27.857 に答える