之前我问了几乎相同的问题,但由于音序器的缘故,我无法使用MERGE语法。问题是我们有数据库中人员的价格规则。我想为那些应该有相同规则的人同步这些价格规则。
+---------------------------+
| id | name | belongs_to_id |
|----+------+---------------+
| 1 | A | |
| 2 | B | 1 |
| 3 | C | 1 |
| 4 | D | |
+----+------+---------------+
好的,现在人们B和C最终需要和用户A有相同的价格规则。所以我有一个像这样的pricerule表(简化):
+-----------------------------------+
| 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 |
+----+---------+------------+-------+
所以在这个例子中,应该发生的是:
我想我必须采取三个步骤:删除,更新,添加。我得到了前两个。但我正在思考插入语句。基本上我需要为用户1选择所有价格规则,然后通过product_id 为每个用户保留连接。我该如何为每个用户执行此操作?
我正在使用Oracle 10.1
答案 0 :(得分: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