Intereting Posts
Можно ли упростить этот запрос sql? преобразовать sql-таблицу в матричной форме Получение количества строк с запросом GROUP BY MySQL SELECT INTO OUTFILE на другой сервер? UPDATE и DELETE в том же SQL в нескольких таблицах? Сложная группировка в SQL-запросе Объединение двух операторов SQL SELECT в одной таблице Sql-код для создания зеркального изображения строки в Oracle sql Лучшая практика? открывать и закрывать несколько подключений или одно большое открытое соединение для ado.net SQL Присоединяйте таблицы к времени между началом и окончанием как вернуть последний вставленный (автоинкрементный) номер строки в HSQL? monetdb sql, чтобы найти или сопоставить ближайшее значение, без TOP или LIMIT Что такое хороший стиль кодирования C # для ловли SQLException и повторной попытки Доступ 2007: запрос для поля DateTime между двумя значениями Short Date Сложное объединение с вложенным предложением group-by / having?

Как использовать подзапрос в запросе на удаление / обновление в mysql

Я использую базу данных mysql 5.0.77, используя запрос:

Delete from IPADDRESS where visitdate Not in (SELECT max(visitdate) FROM IPADDRESS WHERE USERNAME='MGSH0002') and USERNAME='MGSH0002' 

Я получаю эту ошибку при выполнении:

Вы не можете указать целевую таблицу IPADDRESS для обновления из пункта

    Конечно, не лучшее решение, но для вашей проблемы это будет трюк:

     delete i1 from IPADDRESS i1, IPADDRESS i2 where i1.username = i2.username and i1.username = 'MGSH0002' and i1.visitdate < i2.visitdate 

    Альтернативным и гораздо более разумным решением является следующее утверждение:

     delete i1 from IPADDRESS i1, (select max(visitdate) visitdate from IPADDRESS where username = 'MGSH0002') temp where i1.username = 'MGSH0002' and i1.visitdate < temp.visitdate 

    Вы не можете, к сожалению, MySql этого не допускает.

    В настоящее время вы не можете обновить таблицу и выбрать из той же таблицы в подзапросе.

    Из:

    http://dev.mysql.com/doc/refman/5.0/en/update.html