2014-10-07 2 views
0

Я мог бы наконец решить DELETE CASCADE. для этих таблиц.Оператор SQL для удаления нескольких полей в таблице MYSQL

http://subefotos.com/ver/?a6f811bfb78e9aa78ffe43adb1f3cf5do.png

теперь ... мне нужно удалить все строки на AlergiaTipo, когда они, кажется, связано с alergiagrupo на столе ALERGIA. Я делаю это утверждение.

delete from alergiatipo where ID in (select alergiatipo.ID from alergia,alergiatipo where 
alergia.AlergiaTipo_ID = alergiatipo.iD and alergia.ID in (select alergia.ID from 
alergia,alergiagrupo where alergia.AlergiaGrupo_ID = alergiagrupo.ID AND 
alergiagrupo.ID = '2')); 

но вернуть мне эту ошибку

Error Code: 1093. You can't specify target table 'alergiatipo' for update in FROM clause 

ответ

1

Это ваш delete с правильным явным join синтаксисом:

delete from alergiatipo 
    where ID in (select alergiatipo.ID 
       from alergia join 
         alergiatipo 
         on alergia.AlergiaTipo_ID = alergiatipo.iD 
       where alergia.ID in (select alergia.ID 
             from alergia join 
              alergiagrupo 
              on alergia.AlergiaGrupo_ID = alergiagrupo.ID 
             where alergiagrupo.ID = '2' 
            ) 
       ); 

В MySQL, вы не можете указать таблицу удаления других в update или delete. Кроме того, ваше удаление довольно преувеличено. Я думаю, что вы просто хотите следующее:

delete alt 
    from alergiatipo alt join 
     alergia a 
     on a.AlergiaTipo_ID = alt.iD join 
     alergiagrupo ag 
     on a.AlergiaGrupo_ID = ag.ID 
    where ag.ID = 2; 

Я также удалил одинарные кавычки 2. Я предполагаю, что столбец является целым числом, поэтому вы должны использовать целочисленную константу, а не строчную константу.

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