我之前问过几乎相同的问题,但由于定序器的原因我无法使用 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
最佳答案
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
关于sql - 根据同一表中的主记录插入缺失记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10333645/