2017-10-07 233 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'