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

Kembalikan baris hanya jika nilainya tidak ada

SELECT *
FROM reservation
WHERE id NOT IN (select reservation_id
                 FROM reservation_log
                 WHERE change_type = 'cancel')

ATAU:

SELECT r.*
FROM reservation r
LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel'
WHERE l.id IS NULL

Versi pertama lebih intuitif, tetapi menurut saya versi kedua biasanya mendapatkan kinerja yang lebih baik (dengan asumsi Anda memiliki indeks pada kolom yang digunakan dalam gabungan).

Versi kedua berfungsi karena LEFT JOIN mengembalikan baris untuk semua baris di tabel pertama. Saat ON kondisi berhasil, baris tersebut akan menyertakan kolom dari tabel kedua, seperti INNER JOIN . Ketika kondisi gagal, baris yang dikembalikan akan berisi NULL untuk semua kolom di tabel kedua. WHERE l.id IS NULL test kemudian mencocokkan baris tersebut, sehingga menemukan semua baris yang tidak memiliki kecocokan antar tabel.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa arti sebenarnya dari kumpulan karakter dan susunan?

  2. Menggunakan Database Relasional MySQL di Gentoo

  3. Filter menurut COUNT(*)?

  4. Di MySQL, dapatkah saya menyalin satu baris untuk dimasukkan ke dalam tabel yang sama?

  5. DAYOFWEEK() Contoh – MySQL