SQL根据另一个表中的ID更新特定行

时间:2016-09-17 16:06:13

标签: sql oracle

我有两张桌子

Price
RET_ID DBS_ID RRP

Database
DBS_ID PRO_ID

我想使用UPDATE,如果数据库表中的PRO_ID为= 1,我可以将Price表中的RRP增加20%

UPDATE
  ( SELECT RRP
    FROM PRICE
      JOIN database
        ON database.dbs_id = price.dbs_id
  )
SET rrp = 100
WHERE (database.pro_ID = 1);

我一直在尝试各种INNER JOIN ... ON无济于事。 感谢。

3 个答案:

答案 0 :(得分:1)

您可以将过滤条件放在where子句中。以下是使用exists的方法:

update price p
    set rpr = rpr * 1.2
    where exists (select 1
                  from database d
                  where d.dbs_id = p.dbs_id and d.pro_id = 1
                 );

以下是使用in的另一种方式:

update price p
    set rpr = rpr * 1.2
    where p.dbs_id in (select d.dbs_id
                       from database d
                       where d.pro_id = 1
                      );

答案 1 :(得分:1)

    UPDATE Price P SET RRP = RRP*1.2
 WHERE EXISTS 
(select  1 from Database 
where DBS_ID = P.DBS_ID AND PRO_ID = 1);

答案 2 :(得分:1)


您可以使用此查询

MERGE INTO PRICE P 
 USING DATABASE D ON
(P.DBS_ID=D.DBS_ID) AND
D.PRO_ID=1
WHEN MATCHED
THEN
UPDATE SET
P.RRP=P.RRP*1.2;

当您从另一个表更新表时,始终使用MERGE函数,这是SQL中的一个了不起的概念