2012-03-21 9 views
-3

の更新を選択するから、私はこの(作業)を選択しなステートメントがあります。の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

を次のように代わり、IN句をEXISTSを使用することであるかもしれません

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

ように書き換えることができます。または、テーブルの構造とそれらの間の関係は一体何ですか? – GolezTrol

答えて

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行以上も削除されます...理由はありますか? –

+0

おそらく最後に 'and history_yn = 'N''を追加してください。私の更新された答えを見てください。 –

+0

素晴らしい作品、多くのThx。まだ投票していません: –

1

あなたが前にWHERE句を持っている必要があります。クエリは、より効率的なアプローチがmemberships`と `name`の`との関係は何

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の結果を受け取ります。なぜか分かりますか? –