MySQL IF NOT NULL, lalu tampilkan 1, jika tidak, tampilkan 0

105

Saya bekerja dengan sedikit kerumitan tampilan di sini. Saya yakin ada kemampuan IF / ELSE yang baru saja saya abaikan.

Saya memiliki 2 tabel yang saya kueri (pelanggan, alamat). Yang pertama memiliki catatan utama, tetapi yang kedua mungkin memiliki atau tidak memiliki catatan untuk KIRI BERGABUNG.

Saya ingin menampilkan nol jika tidak ada catatan di tabel alamat. Dan saya hanya ingin menampilkan 1, jika ada record.

Apa yang saya coba 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 melakukannya. Tapi saya mungkin salah memanfaatkan COALESCE.

Bagaimana cara menampilkan 0, jika null, dan 1, jika ada?

coffeemonitor
sumber
kemungkinan duplikat kasus Conditional NOT NULL SQL
nawfal

Jawaban:

211

Alih-alih COALESCE(a.addressid,0) AS addressexists, gunakan CASE:

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 berfungsi karena TRUEditampilkan seperti 1di MySQL dan FALSEsebagai 0.

ypercubeᵀᴹ
sumber
96
SELECT c.name, IF(a.addressid IS NULL,0,1) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
Eugen Rieck
sumber
17

Hati-hati jika Anda berasal dari C / C ++ dan mengharapkan ini berfungsi:

select if(name, 1, 0) ..

Bahkan jika 'name' bukan NULL, tidak seperti di C, kondisi palsu masih terpicu dan pernyataan di atas mengembalikan 0. Jadi, Anda harus ingat untuk secara eksplisit memeriksa NULL atau string kosong:

 select if(name is null or name = '', 0, 1)

Contoh PS Eugen di atas benar , tetapi saya ingin mengklarifikasi nuansa ini karena saya terkejut.

Slawomir
sumber
16
SELECT 
    c.name, 
    CASE WHEN a.addressid IS NULL THEN 0 ELSE 1 END AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
pembual
sumber
2

Metode lain tanpa WHERE, coba ini ..

Akan memilih nilai Empty dan NULL

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

Ini akan menetapkan null jika itu adalah string kosong, maka benar juga.

PodTech.io
sumber
Juga berguna: pilih IFNULL (fieldname, "1") dari tablename;
PodTech.io
1

Anda sebenarnya dapat menggunakan pernyataan IF di versi terbaru MySQL.

IF(expr,if_true_expr,if_false_expr)

YAITU:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors
Salvi Pascual
sumber
0

Jika dalam TSQL, Anda dapat mencoba:

SELECT IIF(a.addressid IS NULL, 0, 1) AS addressexists

SQL Server seharusnya berfungsi

Kevin Chen
sumber