ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在处理一些显示并发症。我确定我只是忽略了 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(如果存在)?


y
ypercubeᵀᴹ

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

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


E
Eugen Rieck
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
Community

如果您来自 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,但我想澄清这种细微差别,因为它让我感到意外。


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

P
PodTech.io

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

将同时选择 Empty 和 NULL 值

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

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


也很有用: select IFNULL(fieldname, "1") from tablename;
S
Salvi Pascual

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

IF(expr,if_true_expr,if_false_expr)

IE:

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

D
David

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

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

SQL Server 应该可以工作