2012-03-21 4 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

Что такое соотношение между '' memberships' и name'. Или, какова структура таблиц и взаимосвязь между ними? – 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

Возможно, вам следует добавить 'и history_yn = 'N'' в конце. См. Мой обновленный ответ. –

+0

Отлично работает, Thx много. Cant vote yet :( –

1

Вы должны иметь ИНЕКЕ перед 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 вместо пункта В следующем

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 строк ... У вас есть есть идеи, почему? –

Смежные вопросы