Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL DELETE FROM z podzapytaniem UNION przez warunek IN

Zamiast tego wypróbuj tę wersję:

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

Myślę, że problem jest tajemną kwestią z definicją podzapytania. Podzapytanie to select oświadczenie, podczas gdy union jest połączeniem select oświadczenia.

EDYCJA:

Właściwie, jeśli chcesz wydajności, w ogóle nie używałbyś tego podejścia. Próbowałem tylko pokazać, jak naprawić błąd. Lepszym rozwiązaniem byłoby:

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

Indeksy są zalecane na stairs(id, building) , lift(id, building) i qrcodeid(id, building) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie MySQL z Django — odmowa dostępu dla użytkownika '@'localhost

  2. Jak przekazać tabelę jako parametr do MySqlCommand?

  3. MySQL - Mac - Błąd 2002 - Nie można połączyć się z lokalnym... przez gniazdo

  4. Brak mysql.h i próba znalezienia mysql-devel

  5. Jak włączyć mysqlnd dla php?