I'm bekerja dengan sedikit tampilan komplikasi di sini. I'm yakin ada's JIKA/LAIN kemampuan saya'm hanya pemandangan.
Saya punya 2 tabel I'm query (pelanggan, alamat). Yang pertama memiliki catatan utama, tapi yang kedua mungkin atau mungkin tidak memiliki catatan ke KIRI untuk BERGABUNG.
Saya ingin menampilkan nol jika tidak ada catatan di alamat tabel. Dan saya ingin menampilkan hanya 1, jika sebuah record yang ada.
Apa yang saya've berusaha sejauh ini:
SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
Contoh pertama ini tidak melakukan itu. Tapi aku mungkin akan memanfaatkan MENYATU salah.
Bagaimana saya bisa menampilkan 0, jika null, dan 1, jika sesuatu itu ada?
Bukan MENYATU(a.addressid,0) SEBAGAI addressexists
, gunakan KASUS
:
CASE WHEN a.addressid IS NOT NULL
THEN 1
ELSE 0
END AS addressexists
atau yang lebih sederhana:
(a.addressid IS NOT NULL) AS addressexists
Ini bekerja karena BENAR
ditampilkan sebagai 1
di MySQL dan PALSU
seperti 0
.
Hati-hati jika anda're berasal dari C/C++ dan mengharapkan ini untuk bekerja:
select if(name, 1, 0) ..
Bahkan jika 'nama' tidak NULL, seperti di C, yang palsu-kondisi masih pemicu dan pernyataan di atas kembali 0. Dengan demikian, anda harus ingat untuk memeriksa secara eksplisit NULL atau string kosong:
select if(name is null or name = '', 0, 1)
PS Eugen's contoh di atas adalah benar, tapi saya ingin memperjelas nuansa ini sebagai hal yang mengejutkan saya.