Mysql
 sql >> Database >  >> RDS >> Mysql

Elimina, Aggiorna con tabelle derivate?

Non puoi eliminare direttamente dalla sottoquery, ma puoi comunque usarlo se lo desideri, dovrai solo usarlo in un JOIN :

DELETE usrs
FROM usrs
    INNER JOIN (
        SELECT * FROM usrs WHERE name = 'john'
    ) t ON usrs.Id = t.Id

Oppure potresti usare IN :

DELETE usrs
WHERE ID IN (
   SELECT ID
   FROM usrs
   WHERE name = 'John'
)

Detto questo, per questo esempio, non so perché vorresti una sottoquery:

DELETE usrs WHERE name = 'John'

Modifica la base sui commenti. Per eliminare da più tabelle contemporaneamente, puoi avere più DELETE dichiarazioni, oppure puoi usare qualcosa come il seguente:

delete t1, t2, t3
from (select 'john' as usr) t
  left join t1 on t.usr=t1.usr
  left join t2 on t.usr=t2.usr
  left join t3 on t.usr=t3.usr