sql >> Base de Datos >  >> RDS >> Mysql

MySQL DELETE FROM con subconsulta UNION por condición IN

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