Pertanyaan Pangkalan Data untuk Tempahan Tidak Diubahsuai
Artikel ini membincangkan pengambilan semula tempahan yang tidak diubah suai secara cekap daripada pangkalan data dengan dua jadual: reservation
dan reservation_log
. Klausa WHERE
ringkas tidak sesuai untuk mencari tempahan yang tidak dibatalkan; pendekatan yang lebih canggih diperlukan.
Kaedah 1: Pengecualian menggunakan NOT IN
Satu kaedah menggunakan penolakan untuk mengecualikan tempahan yang dibatalkan. Kami mengenal pasti tempahan yang dibatalkan dalam reservation_log
dan mengecualikan ID mereka daripada jadual reservation
:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
Kaedah 2: Pertanyaan Dioptimumkan dengan LEFT JOIN
Untuk prestasi yang lebih baik, terutamanya dengan lajur diindeks, LEFT JOIN
disyorkan:
<code class="language-sql">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;</code>
Ini LEFT JOIN
mengembalikan semua baris daripada jadual reservation
. Baris yang sepadan daripada reservation_log
(di mana pembatalan wujud) disertakan. Fasal WHERE l.id IS NULL
menapis hasil, hanya mengembalikan tempahan tanpa penyertaan pembatalan yang sepadan dalam reservation_log
.
Kedua-dua kaedah berkesan mendapatkan semula tempahan yang tidak dibatalkan. Pendekatan LEFT JOIN
umumnya menawarkan prestasi yang unggul. Memilih kaedah terbaik bergantung pada saiz pangkalan data dan pengindeksan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Tempahan Yang Tidak Diubah Suai dengan Cekap daripada Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!