Memilih daripada Dua Jadual dengan Baris Tidak Sama dalam MySQL
Dalam pangkalan data beli-belah dalam talian dengan dua jadual - kategori dan produk - tugas biasa ialah untuk mendapatkan semula semua kategori bersama-sama dengan harga produk minimum dan maksimum dalam setiap kategori. Walau bagaimanapun, pertanyaan mudah menghadapi isu: kategori tanpa produk dikecualikan daripada hasil carian.
Untuk menangani cabaran ini, anda perlu menggunakan gabungan luar dan bukannya gabungan tersirat. Cantuman luar membenarkan baris daripada satu jadual (dalam kes ini, kategori) diambil walaupun tiada baris yang sepadan dalam jadual lain (produk). Khususnya, gabungan kiri digunakan di sini, supaya semua kategori disertakan dalam keputusan.
Selain itu, untuk menggantikan nilai nol dengan 0 untuk kategori tanpa produk, fungsi IFNULL() digunakan. Fungsi ini mengambil nilai ungkapan yang disediakan dalam argumen pertama dan jika ia nol, sebaliknya mengembalikan nilai yang dinyatakan dalam argumen kedua.
Sintaks pertanyaan yang dikemas kini adalah seperti berikut:
SELECT sc.*, IFNULL(MIN(s.price), 0) AS minp, IFNULL(MAX(s.price), 0) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
Dengan menggunakan sambungan luar dan fungsi IFNULL(), kami boleh mendapatkan semula semua kategori dan memastikan bahawa kategori tanpa produk diwakili dengan minp dan nilai maxp 0. Pertanyaan ini mengendalikan keperluan untuk memilih daripada dua jadual dengan berkesan walaupun tidak semua baris dalam satu jadual mempunyai entri yang sepadan dalam yang lain.
Atas ialah kandungan terperinci Bagaimana untuk Dapatkan Semua Kategori dan Harga Produk Minimum/Maksimumnya dalam MySQL, Walaupun Beberapa Kategori Tiada Produk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!