1

私は 2 つのテーブルを持っています:boughtItems(buyerId,ItemId)そして、テーブルで各バイヤーが 5 つ以下のアイテムを持っているdenormalized(buyerId,item1,item2,item3,item4,item5) と仮定しましょう。boughtItemsだから私は最初のテーブルから2番目のテーブルにデータを挿入しようとしています。私はこのようにして、各バイヤーの最初のテーブルからすべての行を次のように選択しています

SELECT itemId FROM boughtItems where buyerId=1

次に、すべての行が読み取られたら、2 番目のテーブルに対して対応する挿入コマンドを実行します。このプロセスをスピードアップする方法はありますか? 必要に応じて、プログラム コードも投稿できます。

4

1 に答える 1

2

NB、これは 1 つの CTE で実行できますが、これで明確になったと思います。サーバーでテストしていないので、バグやタイプミスがあるかもしれません.

WITH ranked AS
(
    SELECT buyerID, ROW_NUMBER() OVER(PARTITION BY buyerID) AS ItemRank
    FROM boughtItems
), allColumns AS
(
   SELECT buyerID, i1.ItemID as item1, i2.ItemID as item2, i3.ItemID as item3, i4.ItemID as item4, i5.ItemID as item5
   FROM ranked r
   LEFT JOIN boughtItems item1 ON r.buyerID = item1.buyerID and ItemRank = 1
   LEFT JOIN boughtItems item2 ON r.buyerID = item2.buyerID and ItemRank = 2
   LEFT JOIN boughtItems item3 ON r.buyerID = item3.buyerID and ItemRank = 3
   LEFT JOIN boughtItems item4 ON r.buyerID = item4.buyerID and ItemRank = 4
   LEFT JOIN boughtItems item5 ON r.buyerID = item5.buyerID and ItemRank = 5
)
INSERT INTO denormalized (buyerid, item1, item2, item3, item4, item5)
  SELECT buyerid, item1, item2, item3, item4, item5
  FROM allColumns
于 2012-07-21T18:11:48.923 に答える