MySQL IF NOT NULL,然后显示1,否则显示0

时间:2012-02-22 01:13:18

标签: mysql if-statement

我正在处理一个小显示复杂功能。我确信我只是忽略了IF / ELSE功能。

我有2个表我正在查询(客户,地址)。第一个有主要记录,但第二个可能有也可能没有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?

7 个答案:

答案 0 :(得分:184)

而不是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中显示为1FALSE显示为0

答案 1 :(得分:84)

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

答案 2 :(得分:16)

如果您来自C / C ++并期望这样做,请小心:

select if(name, 1, 0) ..

即使'name'不是NULL,与C不同,虚假条件仍会触发,上面的语句返回0.因此,您必须记住显式检查NULL或空字符串:

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

PS Eugen's example up above is correct,但我想澄清这种细微差别,因为它让我感到意外。

答案 3 :(得分:13)

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

答案 4 :(得分:2)

没有WHERE的另一种方法,试试这个..

将同时选择Empty和NULL值

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

如果它是一个空字符串,它将设置为null,然后在该字符串上也为true。

答案 5 :(得分:0)

如果在TSQL中,您可以尝试:

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

SQL Server应该可以工作

答案 6 :(得分:0)

您实际上可以在最新版本的MySQL中使用IF语句。

IF(expr,if_true_expr,if_false_expr)

IE:

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