Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengembalikan Keputusan Lalai untuk Nilai IN yang Hilang dalam Pertanyaan SQL?
Hasil lalai untuk mengendalikan nilai IN yang hilang dalam pertanyaan SQL
Dalam SQL, pertanyaan IN digunakan untuk menapis baris berdasarkan set nilai. Walau bagaimanapun, apabila digunakan untuk pertanyaan dinamik, ia mungkin perlu untuk mengendalikan situasi di mana beberapa nilai dalam senarai IN mungkin tidak mempunyai rekod yang sepadan dalam pangkalan data. Ini mengakibatkan baris kosong untuk nilai ini, yang mempengaruhi pemprosesan atau paparan data berikutnya.
Untuk menyelesaikan masalah ini, pertimbangkan untuk menulis semula pertanyaan menggunakan LEFT JOIN. Dengan mengalihkan syarat daripada klausa WHERE ke klausa ON bagi LEFT JOIN (seperti yang ditunjukkan dalam kod sampel yang disediakan), anda boleh memastikan bahawa semua nilai dalam senarai IN disertakan dalam set hasil. Ini kerana LEFT JOIN mengembalikan semua baris dalam jadual kiri, walaupun tiada baris yang sepadan dalam jadual kanan.
Contoh:
Pertimbangkan pertanyaan ringkas berikut:
<code class="language-sql">SELECT Name, ID, SUM(Minutes) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
Dalam pertanyaan ini, syarat OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date
ditinggalkan, untuk kesempurnaan kami harus memasukkannya dalam keadaan JOIN.
Pertanyaan yang dipertingkatkan adalah seperti berikut:
<code class="language-sql">SELECT Name, ID, IFNULL(SUM(Minutes), 0) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < CURRENT_TIMESTAMP WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
Kini, untuk sebarang nilai dalam senarai IN yang tidak mempunyai rekod yang sepadan dalam jadual OnlineUseage
, LEFT JOIN akan mengembalikan nilai NULL untuk lajur yang sepadan. Nilai NULL kemudiannya boleh digantikan dengan nilai lalai (0 dalam kes ini) menggunakan fungsi IFNULL.
Pendekatan ini memastikan bahawa semua nilai dalam senarai IN disertakan dalam set hasil dan memberikan nilai lalai yang sesuai kepada nilai yang tidak memenuhi kriteria yang ditentukan. Sila ambil perhatian bahawa CURRENT_TIMESTAMP
digunakan untuk menggantikan <p>Now
samar-samar dalam teks asal untuk memastikan pelaksanaan pertanyaan yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Keputusan Lalai untuk Nilai IN yang Hilang dalam Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!