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

cof*_*tor 97 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
Run Code Online (Sandbox Code Playgroud)

第一个例子没有这样做.但我可能错误地使用了COALESCE.

如果存在,如何显示0,如果为null,则为1?

ype*_*eᵀᴹ 196

而不是COALESCE(a.addressid,0) AS addressexists,使用CASE:

CASE WHEN a.addressid IS NOT NULL 
       THEN 1
       ELSE 0
END AS addressexists
Run Code Online (Sandbox Code Playgroud)

或者更简单:

(a.addressid IS NOT NULL) AS addressexists
Run Code Online (Sandbox Code Playgroud)

这工作,因为TRUE被显示为1在MySQL和FALSE作为0.


Eug*_*eck 91

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
Run Code Online (Sandbox Code Playgroud)


Sla*_*mir 16

如果您来自C/C++并希望这可以工作,请小心:

select if(name, 1, 0) ..
Run Code Online (Sandbox Code Playgroud)

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

 select if(name is null or name = '', 0, 1)
Run Code Online (Sandbox Code Playgroud)

PS Eugen上面的例子是正确的,但我想澄清这个细微差别,因为它让我感到惊讶.


小智 14

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
Run Code Online (Sandbox Code Playgroud)


Pod*_*.io 5

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

将选择空值和 NULL 值

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

SELECT IF(a.addressid IS NULL, 0, 1) AS addressexists
Run Code Online (Sandbox Code Playgroud)

SQL Server 应该可以工作


Sal*_*ual 5

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

IF(expr,if_true_expr,if_false_expr)
Run Code Online (Sandbox Code Playgroud)

IE:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors
Run Code Online (Sandbox Code Playgroud)