2

以前、ほぼ同じ質問をしましたが、シーケンサーのためにMERGE構文を使用できません。問題は、データベース内の人々の価格ルールがあることです。同じルールを持つべき他の人々のためにこれらの価格ルールを同期させたいです。

+---------------------------+
| id | name | belongs_to_id |
|----+------+---------------+
| 1  | A    |               |
| 2  | B    | 1             |
| 3  | C    | 1             |
| 4  | D    |               |
+----+------+---------------+

さて、これで、ユーザーBとCは、最終的に、ユーザーAと同じ価格ルールを持つ必要があります。したがって、次のような価格ルールテーブル(簡略化)があります。

+-----------------------------------+
| id | user_id | product_id | price |
+----+---------+------------+-------+
| 1  | 1       | 1          | 0.12  |
| 2  | 1       | 2          | 0.10  |
| 3  | 1       | 3          | 0.03  |
| 4  | 2       | 2          | 0.10  |
| 5  | 2       | 3          | 0.10  |
| 6  | 3       | 1          | 0.12  |
| 7  | 3       | 2          | 0.10  |
| 8  | 3       | 3          | 0.03  |
| 9  | 3       | 4          | 0.25  |
+----+---------+------------+-------+

したがって、この例では、何が起こるかは次のとおりです。

  • ユーザー2に製品1の価格を0.10で提供します
  • ユーザー2の製品3の価格を0.03に更新します
  • ユーザー3、製品4の価格ルールを削除します

削除、更新、追加の3つの手順を実行する必要があると考えました。私は最初の2つを手に入れました。しかし、私は挿入ステートメントについて輪になって考えています。基本的に、ユーザー1のすべての価格ルールを選択してから、ユーザーごとにproduct_idで結合したままにする必要があります。ユーザーごとにこれを行うにはどうすればよいですか?

Oracle10.1を使用しています

4

1 に答える 1

2
INSERT INTO
  priceRule
SELECT
  user.id,
  parentPriceRule.product_id,
  parentPriceRule.price
FROM
  user
LEFT JOIN
  priceRule    AS parentPriceRule
    ON  parentPriceRule.user_id = user.belongs_to_id
LEFT JOIN
  priceRule    AS myPriceRule
    ON  myPriceRule.user_id     = user.id
    AND myPriceRule.product_id  = parentPriceRule.product_id
WHERE
  myPriceRule.id IS NULL
于 2012-04-26T12:49:09.537 に答える