Выберите для обновления Oracle Sql - PullRequest
0 голосов
/ 21 марта 2012

У меня есть этот (рабочий) выбранный статус:

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 ошибка.Не могли бы вы посоветовать с этим?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Примерно так:

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'
1 голос
/ 21 марта 2012

Вы должны иметь предложение WHERE перед IN.Запрос может быть переписан как

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...