MySQL IF NOT NULL, thì hiển thị 1, còn lại hiển thị 0


104

Tôi đang làm việc với một chút phức tạp hiển thị ở đây. Tôi chắc rằng có một khả năng IF / ELSE mà tôi đang bỏ qua.

Tôi có 2 bảng tôi đang truy vấn (khách hàng, địa chỉ). Đầu tiên có bản ghi chính, nhưng thứ hai có thể có hoặc không có bản ghi để LEFT JOIN tới.

Tôi muốn hiển thị số 0 nếu không có bản ghi nào trong bảng địa chỉ. Và tôi muốn chỉ hiển thị 1, nếu bản ghi tồn tại.

Những gì tôi đã cố gắng cho đến nay:

SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

Ví dụ đầu tiên này không làm điều đó. Nhưng tôi có thể đang sử dụng COALESCE sai.

Làm cách nào để hiển thị số 0, nếu null và 1, nếu tồn tại?


Câu trả lời:


211

Thay vì COALESCE(a.addressid,0) AS addressexists, hãy sử dụng CASE:

CASE WHEN a.addressid IS NOT NULL 
       THEN 1
       ELSE 0
END AS addressexists

hoặc đơn giản hơn:

(a.addressid IS NOT NULL) AS addressexists

Điều này hoạt động vì TRUEđược hiển thị như 1trong MySQL và FALSEdưới dạng 0.


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

17

Hãy cẩn thận nếu bạn đến từ C / C ++ và mong muốn điều này hoạt động:

select if(name, 1, 0) ..

Ngay cả khi 'name' không phải là NULL, không giống như trong C, một điều kiện sai vẫn kích hoạt và câu lệnh trên trả về 0. Vì vậy, bạn phải nhớ kiểm tra rõ ràng chuỗi NULL hoặc chuỗi trống:

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

Ví dụ của PS Eugen ở trên là đúng , nhưng tôi muốn làm rõ sắc thái này vì nó khiến tôi ngạc nhiên.


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

2

Một phương pháp khác không có WHERE, hãy thử điều này ..

Sẽ chọn cả giá trị Empty và NULL

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

Nó sẽ đặt null nếu nó là một chuỗi rỗng, sau đó cũng đúng với điều đó.


Cũng hữu ích: chọn IFNULL (tên trường, "1") từ tên bảng;
PodTech.io

1

Bạn thực sự có thể sử dụng câu lệnh IF trong các phiên bản MySQL mới nhất.

IF(expr,if_true_expr,if_false_expr)

I E:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors

0

Nếu trong TSQL, bạn có thể thử:

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

SQL Server sẽ hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.