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

MySQL:Menemukan baris yang tidak mengambil bagian dalam suatu hubungan

Berikut adalah cara umum untuk melakukan kueri ini tanpa menggunakan metode subkueri yang Anda tunjukkan. Ini mungkin memenuhi permintaan @Godeke untuk melihat solusi berbasis gabungan.

SELECT * 
FROM movies m
 LEFT OUTER JOIN seen s
 ON (m.id = s.movie_id AND s.user_id = 123)
WHERE s.movie_id IS NULL;

Namun, di sebagian besar merek database, solusi ini dapat berkinerja lebih buruk daripada solusi subquery. Sebaiknya gunakan EXPLAIN untuk menganalisis kedua kueri, untuk melihat mana yang lebih baik berdasarkan skema dan data Anda.

Berikut variasi lain pada solusi subquery:

SELECT * 
FROM movies m
WHERE NOT EXISTS (SELECT * FROM seen s 
                  WHERE s.movie_id = m.id 
                    AND s.user_id=123);

Ini adalah subkueri yang berkorelasi, yang harus dievaluasi untuk setiap baris kueri luar. Biasanya ini mahal, dan kueri contoh asli Anda lebih baik. Di sisi lain, di MySQL "NOT EXISTS " seringkali lebih baik daripada "column NOT IN (...) "

Sekali lagi, Anda harus menguji setiap solusi dan membandingkan hasilnya untuk memastikan. Membuang-buang waktu untuk memilih solusi apa pun tanpa mengukur kinerja.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Host server MySQL tidak dikenal

  2. log4net logging error di database mysql logging

  3. Kesalahan (Kode Kesalahan:1175) saat menjalankan perintah pembaruan di atas meja menggunakan MySQL Workbench 5.2

  4. Kesalahan MySQL 1215:Tidak dapat menambahkan batasan kunci asing

  5. banyak-ke-banyak-hubungan antara dua entitas di boot musim semi