2017-10-07 232 views
1

我有2个表fooditem和food_serve。我可以看到我想如何在SQL oracle中使用UPDATE和JOIN?

SELECT food_serve.food_serve_cost 
FROM fooditem INNER JOIN food_serve 
ON fooditem.food_item_no= food_serve.food_item_no and fooditem.food_type = 'M'and food_serve.food_serve_size = 'ST'; 

但我尝试在我更新这样的但其引发错误的价值观

update q 
set q.food_serve_cost = q.food_serve_cost *1.15 
from food_serve q 
inner join fooditem a 
on q.food_item_no = a.food_item_no 
where a.food_type = 'M' AND q.FOOD_SERVE_SIZE = 'ST'; 

后更改数据研究我发现,从不能用于更新,但我无法找到这个修补程序 任何帮助吗?即时通讯使用的Oracle SQL Developer

+0

这可能有助于https://stackoverflow.com/questions/2446764/update-statement-with-inner- join-on-oracle –

+0

更多重复在这里:https://stackoverflow.com/search?q=%5Boracle%5D+update+with+join –

回答

0
update food_serve q 
inner join fooditem a 
on q.food_item_no = a.food_item_no 
set q.food_serve_cost = q.food_serve_cost *1.15 
where a.food_type = 'M' AND q.FOOD_SERVE_SIZE = 'ST'; 
0

UPDATE ... FROM ...语法从PostgreSQL Update到来。
这是专有语法,不适用于其他RDBMS系统。


使用此查询

update q 
set q.food_serve_cost = q.food_serve_cost *1.15 
WHERE EXISTS (
    SELECT null FROM fooditem a 
    WHERE q.food_item_no = a.food_item_no 
    AND a.food_type = 'M' 
) 
AND q.FOOD_SERVE_SIZE = 'ST' 

或它的变化:

update q 
set q.food_serve_cost = q.food_serve_cost *1.15 
WHERE food_item_no IN (
     SELECT food_item_no FROM fooditem 
     WHERE food_type = 'M' 
    ) 
AND FOOD_SERVE_SIZE = 'ST'