Memandangkan dua jadual, tempahan dan reservation_log, di mana tempahan mengandungi maklumat tempahan umum dan reservation_log menjejaki perubahan yang dibuat pada tempahan (termasuk pembatalan), tugas adalah untuk mengeluarkan tempahan yang belum dibatalkan. Klausa WHERE yang mudah berfungsi dengan berkesan untuk mengenal pasti tempahan yang dibatalkan, tetapi ia gagal apabila mencari rekod yang tidak dibatalkan.
Nasib baik, dua pendekatan boleh digunakan untuk menyelesaikan tugas ini:
Kaedah ini memanfaatkan klausa NOT IN untuk mengecualikan tempahan dengan pembatalan yang sepadan rekod.
SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );
Pendekatan alternatif ialah menggunakan operasi LEFT JOIN. Gabungan kiri mendapatkan semula semua baris daripada jadual tempahan dan termasuk baris yang sepadan daripada jadual reservation_log jika ia wujud. Baris tanpa rekod pembatalan sepadan akan mempunyai nilai NULL dalam lajur reservation_log. Klausa WHERE kemudiannya boleh menapis baris ini.
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;
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Tempahan Yang Tidak Dibatalkan daripada Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!