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

Amigo_9876
На сайте с 01.04.2009
Offline
305
823

Этот запрос выводит на экран список всех нужных 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
И нифига все равно.
Кто может, помогите.

Меняюсь ссылками с украинских PBN (стройка, техника, грузоперевозки)
Anamnado
На сайте с 08.02.2010
Offline
242
#1

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

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

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

хз..

edogs software
На сайте с 15.12.2005
Offline
775
#2

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

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

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

SELECT new_table.id FROM new_table....

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

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

Amigo_9876
На сайте с 01.04.2009
Offline
305
#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
775
#6

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

IL
На сайте с 20.04.2007
Offline
435
#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
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Amigo_9876
На сайте с 01.04.2009
Offline
305
#8

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

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

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