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

MySQL DELETE FROM avec la sous-requête UNION par condition IN

Essayez plutôt cette version :

DELETE FROM startpoint
    WHERE id IN (select *
                 from ((SELECT id FROM stairs WHERE building = 123)
                       UNION
                      (SELECT id FROM lift WHERE building = 123)
                       UNION
                      (SELECT id FROM qrcodeid WHERE building = 123)
                )

Je pense que le problème est un problème obscur avec la définition d'une sous-requête. Une sous-requête est un select déclaration, alors qu'une union est une conjonction de select déclarations.

MODIFIER :

En fait, si vous voulez de l'efficacité, vous n'utiliserez pas du tout cette approche. J'essayais juste de montrer comment corriger l'erreur. Une meilleure solution serait :

DELETE sp FROM startpoint sp
    WHERE EXISTS (select 1 from stairs s where s.building = 123 and s.id = sp.id) or
          EXISTS (select 1 from lift l where l.building = 123 and l.id = sp.id) or
          EXISTS (select 1 from qrcodeid q where q.building = 123 and q.id = sp.id);

Les index sont recommandés sur stairs(id, building) , lift(id, building) , et qrcodeid(id, building) .