MySQLIF NOTNULL,然后显示1,否则显示0

我正在处理一个小的显示复杂性。我肯定有一个 IF/ELSE 功能我只是忽略了。

我有两个表,我正在查询(客户,地址)。第一个有主记录,但是第二个可能有也可能没有左连接到的记录。

如果地址表中没有记录,我想显示一个零。 如果记录存在,我只想显示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?

418499 次浏览

使用 CASE代替 COALESCE(a.addressid,0) AS addressexists:

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

或者更简单:

(a.addressid IS NOT NULL) AS addressexists

这是因为在 MySQL 中 TRUE显示为 1,而 FALSE显示为 0

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
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

如果你来自 C/C + + ,并且希望这样做能够奏效,请小心:

select if(name, 1, 0) ..

即使‘ name’不是 NULL,与 C 语言不同,仍然会触发一个 false 条件,并且上面的语句返回0。因此,必须记住显式检查 NULL 或空字符串:

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

但我想澄清这个细微差别,因为它让我吃了一惊。

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

将同时选择空值和 NULL 值

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

如果它是一个空字符串,它将设置 null,那么对于该字符串也为 true。

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

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

SQLServer 应该可以工作

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

IF(expr,if_true_expr,if_false_expr)

IE:

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