Ошибка 1093 утверждает, что вы не можете ОБНОВИТЬ или УДАЛИТЬ, используя подзапрос, если ваш подзапрос запрашивает таблицу, из которой вы удаляете.
Так что вы не можете сделать
delete from table1 where id in (select something from table1 where condition) ;
Хорошо, как лучше обойти это ограничение (если вы действительно нуждаетесь в подзапросе, чтобы выполнить удаление, и не можете полностью удалить самоссылающийся подзапрос?)
Edit:
Вот запрос для тех, кому интересно:
mysql> desc adjacencies ;
+---------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| parent | int(11) | NO | PRI | NULL | |
| child | int(11) | NO | PRI | NULL | |
| pathLen | int(11) | NO | | NULL | |
+---------+---------+------+-----+---------+-------+
-- The query is going to
-- tell all my children to
-- stop thinking my old parents
-- are still their parents
delete from adjacencies
where parent in
(
-- ALL MY PARENTS,grandparents
select parent
from adjacencies
where child=@me
and parent!=@me
)
-- only concerns the relations of my
-- grandparents WHERE MY CHILDREN ARE CONCERNED
and child in
(
-- get all my children
select child
from adjacencies
where parent=@me
)
;
Итак, я попробовал создать временную таблицу с именем adjsToDelete
create temporary table adjsToRemove( parent int, child int ) ;
insert into adjsToRemove...
Так что теперь у меня есть коллекция отношений для удаления, где каждая из родительских / дочерних пар однозначно идентифицирует строку для удаления. Но как мне теперь удалить каждую пару из таблицы смежностей?
Кажется, мне нужно добавить уникальный ключ auto_increment
к каждой записи в adjacencies
, верно?