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)
.