2012-02-22 154 views
73

我在這裏使用一點顯示覆雜。我敢肯定,我只是忽略了一個IF/ELSE功能。MySQL IF NOT NULL,然後顯示1,否則顯示0

我有兩個表我在查詢(客戶,地址)。第一個有主要記錄,但第二個可能有也可能沒有記錄到LEFT JOIN。

如果地址表中沒有記錄,我想顯示一個零。 我想只顯示1,如果有記錄存在。

我到目前爲止已經嘗試:

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

第一個例子不這樣做。但是我可能會錯誤地使用COALESCE。

如何顯示0(如果爲空)和1(如果存在)?

+0

[Conditional NOT NULL case SQL](http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal 2013-05-03 13:20:35

回答

154

相反的COALESCE(a.addressid,0) AS addressexists,使用CASE

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

或簡單:

(a.addressid IS NOT NULL) AS addressexists 

這工作,因爲TRUE顯示爲在MySQL 1FALSE0

+19

+1(a.addressid IS NOT NULL)AS的可能重複地理學家 – Simon 2012-02-22 01:19:24

+0

完美,謝謝 – Vignesh 2015-06-03 12:18:24

+0

謝謝這救了我的命! – 2016-12-21 11:42:39

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/C來++,並期待這項工作:

select if(name, 1, 0) .. 

即使 '名' 不爲空,不像在C,假條件仍然觸發器和上面的語句返回0。因此,你必須記住要明確檢查NULL或空字符串:

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

PS Eugen's example up above is correct,但我想澄清這個細微差別,因爲它讓我吃了一驚。

1

沒有WHERE,試試這個..

會選擇這兩個空的另一種方法和NULL值

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

將設置爲空值,如果它是一個空字符串,然後是上也是如此。

+0

也有用:從表名中選擇IFNULL(fieldname,「1」); – Hariboo 2017-04-19 13:39:52