2014-03-30 42 views
0

有两个表。第一个是费用第二个是expenses_items带有加入的Oracle更新查询

费用中有2列表为expns_idexpns_job_type

expense_items表中有2列表expns_id(费用表外键)和group

我需要更新expenses_itemsgroup,并设置它的价值development凡在expenses表像new buildingexpns_job_type值。

我已经尝试过下面的查询。但没有工作。

update expenses_items 
set expenses_items."group" = 'development' 
join expenses ON 
expenses_items.expns_id = expenses.expns_id 
where expenses.expns_job_type like 'new building' 

我怎么能这样做?

回答

1

可以在where子句来限制你的更新请求使用子查询:

UPDATE expenses_items ei SET 
    group = 'dvelopment' 
WHERE EXISTS(
    SELECT expns_id FROM expenses e 
    WHERE e.expns_id = ei.expns.id 
    AND expns_job_type LIKE 'new building' 
) 

而且其可错字,但你使用LIKE条款不使用通配符。如果您需要完全匹配 - 请使用=而不是LIKE

1

Oracle使用UPDATE语法与SQL Server支持有什么不同。请参阅Oracle文档UPDATE和MERGE语句:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10007.htm

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9016.htm#i2081218

在你的情况下,这应该是这样

update expenses_items 
set expenses_items."group" = 'development' 
where exists (select * from expenses 
where expenses_items.expns_id = expenses.expns_id 
and expenses.expns_job_type like 'new building' 
) 

merge into expenses_items using 
(
select expenses.expns_id 
from expenses 
where expenses.expns_job_type like 'new building' 
) src on (expenses_items.expns_id = src.expns_id) 
when matched then 
    update set expenses_items."group" = 'development' 
1

甲骨文没有按” t支持“加入更新”句法。您可以改为:

update expenses_items e 
set group = 'development' 
where exists 
(
select 1 
from expenses 
where expns_id = e.expns_id and expns_job_type like '%new building%' 
)