Подскажите по MySql как удалить строки

Amigo_9876
На сайте с 01.04.2009
Offline
250
526

Этот запрос выводит на экран список всех нужных ID в заданной таблице. Ок, работает.


SELECT us.id FROM e1xc7_users us
LEFT JOIN
e1xc7_obj o ON us.id = o.obj_author
WHERE
o.obj_author IS NULL

Теперь хочу удалить все строки с данным id, и нифига.


DELETE FROM e1xc7_users WHERE e1xc7_users.id IN (
SELECT us.id FROM e1xc7_users us
LEFT JOIN
e1xc7_obj o ON us.id = o.obj_author
WHERE
o.obj_author IS NULL)

Выдает ошибку #1093 - Не допускается указание таблицы 'e1xc7_users' в списке таблиц FROM для внесения в нее изменений.
Погуглил, сделал как тут: http://hostciti.net/faq/mysql/udalit-dubli-iz-tablitsi-mysql.html
И нифига все равно.
Кто может, помогите.

Автоматическая публикация в ВК, FB, Twit, Instgm (http://bit.do/fcdAH) - от 250 руб/месяц. Лучший украинский хостинг (http://bit.do/fcdAQ) Проверяю на индекс (http://bit.do/fcdBe) и тут же индексирую (http://bit.do/fcdBj)
Anamnado
На сайте с 08.02.2010
Offline
239
#1

что то очень уж мудрено как то всё ..

я не мог понять что такое о. если ее нету в списке from

ну и вот эта виртуальная выборка и - нужно четкое понимание что происходит и синтаксис -оно и глючит - это ясно .....

хз..

Подпись без рабочей ссылки все равно, что коитус без кульминации ((c) Anadonam)
edogs software
На сайте с 15.12.2005
Offline
714
#2

Просто сделайте временную таблицу, копирните туда ИД-шники, а потом удалите по ИД-шникам из этой таблицы.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход.
Amigo_9876
На сайте с 01.04.2009
Offline
250
#3
edogs:
Просто сделайте временную таблицу, копирните туда ИД-шники, а потом удалите по ИД-шникам из этой таблицы.

Получится ведь тоже самое. Только будет

SELECT new_table.id FROM new_table....

Anamnado
На сайте с 08.02.2010
Offline
239
#4

Amigo_9876, но не будет "виртуальности" из за которой и не получается ..

Amigo_9876
На сайте с 01.04.2009
Offline
250
#5

Чтот не получается у меня вообще с оператором delete сдружиться

Вставил все нужные значения в новую таблицу temp, в столбец iD

Пытаюсь задать команду

DELETE FROM `e1xc7_users` WHERE `e1xc7_users`.`id` = `temp`.`id`;

Выдает ошибку.

#1054 - Неизвестный столбец 'temp.id' в 'where clause'

edogs software
На сайте с 15.12.2005
Offline
714
#6

DELETE FROM `e1xc7_users` WHERE `e1xc7_users`.`id` in (select `id` from `temp`)

IL
На сайте с 20.04.2007
Offline
412
#7

Есть ещё есть "лайфхак" с INNER JOIN и подзапросом на #1093 ошибку ..

Что-то такое должно работать

DELETE u 

FROM e1xc7_users u INNER JOIN
(SELECT us.id FROM e1xc7_users us
LEFT JOIN
e1xc7_obj o ON us.id = o.obj_author
WHERE
o.obj_author IS NULL) u2
ON u.id = u2.id
Amigo_9876
На сайте с 01.04.2009
Offline
250
#8

edogs, ivan-lev, Огромное спасибо.

Ваши варианты работают.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий