Rumah >pangkalan data >tutorial mysql >Mengapa CONCAT MySQL Kembali NULL Apabila Medan Mengandungi Nilai NULL, dan Bagaimana Saya Boleh Membetulkannya?
MySQL CONCAT Mengembalikan NULL untuk Medan yang Mengandungi NULL: Penyelesaian dan Alternatif
Fungsi CONCAT MySQL menggabungkan berbilang medan menjadi satu rentetan. Walau bagaimanapun, ia boleh menjadi masalah apabila sesetengah medan mengandungi nilai NULL, menyebabkan keseluruhan ungkapan mengembalikan NULL.
Gambaran Keseluruhan Masalah
Pertimbangkan jadual dan pertanyaan berikut:
Table: devices | affiliate_name | affiliate_location | model | ip | os_type | os_version | |---|---|---|---|---|---| | cs1 | inter | Dell | 10.125.103.25 | Linux | Fedora | | cs2 | inter | Dell | 10.125.103.26 | Linux | Fedora | | cs3 | inter | Dell | 10.125.103.27 | NULL | NULL | | cs4 | inter | Dell | 10.125.103.28 | NULL | NULL | Query: SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices
Pertanyaan ini mengembalikan nama peranti sebagai berikut:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)
Penyelesaian: Gantikan NULL dengan Rentetan Kosong
Untuk mengabaikan nilai NULL dan sebaliknya menggabungkan rentetan kosong, anda boleh menggunakan fungsi COALESCE. COALESCE mengambil berbilang argumen dan mengembalikan argumen bukan NULL yang pertama.
Berikut ialah pertanyaan yang diubah suai:
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name FROM devices
Pertanyaan ini mengembalikan hasil yang diingini:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora cs3-Dell-10.125.103.27- cs4-Dell-10.125.103.28-
Atas ialah kandungan terperinci Mengapa CONCAT MySQL Kembali NULL Apabila Medan Mengandungi Nilai NULL, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!