2012-03-21 77 views
-3

我有這個(工作)選擇statment:從選擇要更新的Oracle SQL

select * from memberships where MEMBERSHIP_TYPE = 'ZZZ' and inactive_date is null 
and name_id in (select name_id from name where history_yn = 'N') 

,但現在我想改變它,所以這將是一個更新語句,:

update name 
set history_yn = 'Y' 
IN (select * from memberships where MEMBERSHIP_TYPE = 'ZZZ' and inactive_date is null) 

,但我收到ora-00933錯誤。你能提供這方面的建議嗎?

+1

什麼是memberships'和'name''之間的關係。或者,表格的結構和它們之間的關係是什麼? – GolezTrol 2012-03-21 11:03:02

回答

2

事情是這樣的:

update name set history_yn = 'Y' 
where name_id IN (select name_id 
        from memberships 
        where MEMBERSHIP_TYPE = 'ZZZ' and inactive_date is null) 
and history_yn = 'N' 
+0

嗨,當我使用我的選擇我收到50個結果。但是當我使用更新時,我刪除了200多行...你知道爲什麼嗎? – 2012-03-21 12:54:36

+0

也許你應該在末尾加上'and history_yn ='N''。看到我更新的答案。 – 2012-03-21 13:02:25

+0

工程很棒,Thx很多。還沒有投票:( – 2012-03-21 13:36:32

1

你需要有之前WHERE子句。查詢可改寫爲

update name set history_yn = 'Y' 
WHERE name_id 
IN (select name_id from memberships where MEMBERSHIP_TYPE = 'ZZZ' and inactive_date is null) 

更有效的方法可能是使用exists代替IN子句如下

update name n set history_yn = 'Y' 
WHERE EXISTS 
(select name_id from memberships where MEMBERSHIP_TYPE = 'ZZZ' 
    and inactive_date is null 
    and name_id = n.name_id) 
+0

嗨,當我使用我的選擇我收到50個結果但是當我使用更新時,我刪除了200多行......你有什麼想法爲什麼? – 2012-03-21 12:57:06