Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL DELETE FROM dengan subquery UNION dengan kondisi IN

Coba versi ini sebagai gantinya:

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

Saya pikir masalahnya adalah masalah misterius dengan definisi subquery. Subquery adalah select pernyataan, sedangkan union adalah konjungsi dari select pernyataan.

EDIT:

Sebenarnya, jika Anda ingin efisiensi, Anda tidak akan menggunakan pendekatan ini sama sekali. Saya hanya mencoba menunjukkan cara memperbaiki kesalahan. Solusi yang lebih baik adalah:

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

Indeks direkomendasikan di stairs(id, building) , lift(id, building) , dan 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. Bagaimana cara mengubah waktu ke zona waktu perangkat iPhone?

  2. Integer panjang ditransformasikan ketika dimasukkan ke dalam kolom yang lebih pendek, tidak terpotong. Mengapa? Apa rumusnya?

  3. Panjang MySQL () vs char_length ()

  4. Menggunakan Fitur Oracle JDeveloper Tingkat Lanjut untuk Database MySQL

  5. menggabungkan tabel yang sama dua kali pada kolom yang berbeda