2014-10-10 3 views
0

Я пытаюсь обновить восстановленный столбец в одной таблице, когда запись не находится в другой пользовательской таблице. Моя проблема заключается в том, что я написал написанные прогоны навсегда. как лучше всего я могу написать запрос ниже.Запрос выполняется навсегда ORACLE

update TBLG2O_REGISTER a set a."isDeleted" = '1' 
where a."UserID" not in (select k."UserID" from TBLG2O_USER k) 
+0

в 2 таблицы содержат mothan 290000 записей – Prince

+0

Какие СУБД? Лучше использовать левое соединение. – radar

+2

Существует несколько альтернативных вариантов 'not in', таких как' not exist', но вы, вероятно, просто пропускаете соответствующие ключи/индексы с таблицами. 'не в' и' не существует', как правило, самые быстрые подходы (в зависимости от ваших rdbms), но, как всегда, вы должны проверить себя. – sgeddes

ответ

0

Наконец получил его на работу Спасибо за вашу помощь

Update TBLG2O_REGISTER a set a."isDeleted" = '1' where a."UserID" in (select p."UserID" 
    from TBLG2O_REGISTER p left join TBLG2O_USER k on p."UserID" =k."UserID" 
where k."UserID" is null) 
1

Ответ будет зависеть от базы данных. Характеристики производительности сильно различаются в разных механизмах баз данных, и вы не указали, какой сервер БД вы используете.

Однако подзапросы часто являются ахиллесовой пятой MySQL; Я бы не удивился, если бы это был MySQL. Если да, то следующий подход должен иметь лучшие характеристики с MySQL:

update TBLG2O_REGISTER a left join TBLG20_USER k using(UserID) 
set a.isDeleted = '1' where k.UserID is null; 
+0

Я использую это в Oracle, он говорит, что отсутствует ключевое слово SET – Prince

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