2016-09-17 2 views
0

У меня есть две таблицыSQL Обновление конкретных строк на основе идентификатора в другой таблице

Price 
RET_ID DBS_ID RRP 

Database 
DBS_ID PRO_ID 

Я хотел бы использовать UPDATE таким образом, что я могу увеличить ОРП в таблице цен на 20%, если PRO_ID в таблица базы данных является = 1

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 безрезультатно. Спасибо.

ответ

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 
        ); 
+0

Спасибо, кучка Гордон. Мне потребовалось некоторое время, но я, наконец, обнял идею WHERE ... IN. Очень признателен. –

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); 
+0

Большое спасибо Акшей. –

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

+0

Надеюсь, вы пойдете. Любые сомнения, не стесняйтесь спрашивать –

+0

Спасибо Мил Джим! :) –

Смежные вопросы