2014-04-29 3 views
0

Я выполняю массовое обновление столбца внутри таблицы. Мне нужно изменить текущую дату с NULL на прошлую дату. Что я знаю, прекрасно работает при выполнении одной учетной записи. Но при использовании WILDCARD это, похоже, терпит неудачу.SQL-UPDATE Команды сбой при использовании LIKE

Любые идеи, что мой вопрос, я не могу использовать как в подзапроса ..

SET message.archived_at = (SELECT TO_CHAR(systimestamp-31, 'DD-MON-YY HH.MI.SS') 
FROM dual) 
WHERE EXISTS = (SELECT entity_id FROM user_info 
WHERE UPPER(user_info.directory_auth_id) like 'USER%') 

У меня есть 10000 записей, что мне нужно обновить ..

Я изменил к

ОБНОВЛЕНИЕ сообщение SET message.archived_at = (SELECT TO_CHAR (systimestamp-31, 'DD-MON-YY HH.MI.SS') ОТ двойного) ГДЕ EXISTS (SELECT ENTITY_ID ОТ user_info ГДЕ ВЕРХНИЙ (острая ctory_auth_id), как «JLOADUSER1001%»)

запрос SELECT в разделе WHERE EXISTS при запуске сам по себе возвращает 10 идентификаторов пользователей. Но когда весь запрос запущен, это обновляет 1,8 миллиона строк .. ожидаемый результат ~ 1500 строк.

+0

является user_info.directory_auth_id начиная с USER? Также добавьте ошибку msg .. –

+0

Ошибка SQL: ORA-01427: однострочный подзапрос возвращает более одной строки 01427. 00000 - «однострочный подзапрос возвращает более одной строки» * Причина: * Действие: – Boardman411

ответ

2

В подзапросах Oracle и утверждениях UPDATE допускаются предложения LIKE. Линия, которая кажется ошибочным является:

WHERE EXISTS = (SELECT entity_id FROM user_info 

Использование:

WHERE EXISTS (SELECT entity_id FROM user_info 

вместо

+0

Похоже, что мой SQL-запрос игнорирует инструкцию SELECT при обновлении - все строки обновляются в таблице «сообщение». Как только я удалю = после WHERE EXISTS. – Boardman411

+0

Кажется, что WHERE EXISTS просто игнорируется. – Boardman411

+1

Вы обновляете все строки, потому что вы не указали никаких отношений между первой таблицей и user_info. Не могли бы вы указать логическую связь между этими двумя таблицами? –

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