Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于同一表中的主记录插入缺失的记录_Sql_Oracle_Join - Fatal编程技术网

Sql 基于同一表中的主记录插入缺失的记录

Sql 基于同一表中的主记录插入缺失的记录,sql,oracle,join,Sql,Oracle,Join,我以前问过几乎相同的问题,但由于sequencer,我不能使用合并语法。问题是,我们在数据库中为人们制定了价格规则。我想为其他应该有相同规则的人同步这些价格规则 +---------------------------+ | id | name | belongs_to_id | |----+------+---------------+ | 1 | A | | | 2 | B | 1 | | 3 | C | 1

我以前问过几乎相同的问题,但由于sequencer,我不能使用合并语法。问题是,我们在数据库中为人们制定了价格规则。我想为其他应该有相同规则的人同步这些价格规则

+---------------------------+
| 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的价格规则
我想我必须采取三个步骤:删除、更新、添加。我得到了前两个。但是我在考虑insert语句。基本上,我需要为用户1选择所有的价格规则,然后为每个用户按product_id左键加入。如何为每个用户执行此操作


我使用Oracle 10.1专门为用户_id 1插入,我在底部添加了“AND user.belogds_To_id=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