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 的定价规则

我想我必须采取三个步骤:删除、更新、添加。我得到了前两个。但我正在考虑插入语句。基本上我需要为用户 1 选择所有价格规则,然后按 product_id为每个用户离开加入。我如何为每个用户执行此操作?

我正在使用 Oracle 10.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 回答