Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengembalikan Keputusan Lalai untuk Nilai IN yang Hilang dalam Pertanyaan SQL?

Bagaimana untuk Mengembalikan Keputusan Lalai untuk Nilai IN yang Hilang dalam Pertanyaan SQL?

Patricia Arquette
Lepaskan: 2025-01-17 06:31:09
asal
435 orang telah melayarinya

How to Return Default Results for Missing IN Values in SQL Queries?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan