Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL DELETE FROM com subconsulta UNION por condição IN


Tente esta versão em vez disso:
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)
                )

Eu acho que o problema é um problema misterioso com a definição de uma subconsulta. Uma subconsulta é um select declaração, enquanto uma union é uma conjunção de select declarações.

EDITAR:

Na verdade, se você quer eficiência, não usaria essa abordagem. Eu estava apenas tentando mostrar como corrigir o erro. Uma solução melhor seria:
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);

Índices são recomendados em stairs(id, building) , lift(id, building) e qrcodeid(id, building) .