Mysql
 sql >> Base de données >  >> RDS >> Mysql

Supprimer, mettre à jour avec des tables dérivées ?

Vous ne pouvez pas supprimer directement de la sous-requête, mais vous pouvez toujours l'utiliser si vous le souhaitez, vous aurez juste besoin de l'utiliser dans un JOIN :

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

Ou vous pouvez utiliser IN :

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

Cela dit, pour cet exemple, je ne sais pas pourquoi vous voudriez une sous-requête :

DELETE usrs WHERE name = 'John'

Modifier la base sur les commentaires. Pour supprimer de plusieurs tables en même temps, vous pouvez soit avoir plusieurs DELETE déclarations, ou vous pouvez utiliser quelque chose comme ce qui suit :

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