2012-02-22 39 views
73

Tôi đang làm việc với một biến chứng hiển thị nhỏ ở đây. Tôi chắc rằng có một khả năng IF/ELSE mà tôi chỉ xem xét.MySQL IF NOT NULL, sau đó hiển thị 1, hiển thị khác 0

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 lần thứ hai có thể hoặc có thể không có một bản ghi để LEFT JOIN.

Tôi muốn hiển thị số không nếu không có bản ghi trong bảng địa chỉ. Và tôi muốn chỉ hiển thị 1, nếu một 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ể sử dụng COALESCE sai.

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

+0

bản sao có thể có của [Trường hợp điều kiện NOT NULL SQL] (http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal

Trả lời

154

Thay vì COALESCE(a.addressid,0) AS addressexists, 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 

này hoạt động vì TRUE được hiển thị như 1 trong MySQL và FALSE như 0.

+19

+1 cho (a.addressid IS NOT NULL) AS addressexists – Simon

+0

hoàn hảo, cảm ơn – Vignesh

+0

cảm ơn điều này đã cứu mạng tôi! –

12
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 
72
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 
14

cẩn thận nếu bạn đang đến từ C/C++ và mong đợi này để làm việc:

select if(name, 1, 0) .. 

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

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

PS Eugen's example up above is correct, nhưng tôi muốn làm rõ sắc thái này vì nó làm tôi ngạc nhiên.

1

Một phương pháp mà không đề WHERE, thử này ..

sẽ chọn cả hai rỗng và NULL giá trị

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

Nó sẽ thiết lập null nếu nó là một chuỗi rỗng, sau đó là sự thật trên đó cũng có.

+0

Cũng hữu ích: chọn IFNULL (tên trường, "1") từ tablename; – Hariboo

Các vấn đề liên quan