Prueba esta versión en su lugar:
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)
)
Creo que el problema es un problema arcano con la definición de una subconsulta. Una subconsulta es un select
declaración, mientras que una union
es una conjunción de select
declaraciones.
EDITAR:
En realidad, si desea eficiencia, no usaría este enfoque en absoluto. Solo estaba tratando de mostrar cómo corregir el error. Una mejor solución sería:
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);
Se recomiendan índices en stairs(id, building)
, lift(id, building)
y qrcodeid(id, building)
.