我正在处理一些显示并发症。我确定我只是忽略了 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(如果存在)?
使用 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 中显示为 1
而 FALSE
显示为 0
。
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 不同,仍然会触发错误条件并且上述语句返回 0。因此,您必须记住显式检查 NULL 或空字符串:
select if(name is null or name = '', 0, 1)
PS Eugen's example up above is correct,但我想澄清这种细微差别,因为它让我感到意外。
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
另一种没有 WHERE 的方法,试试这个..
将同时选择 Empty 和 NULL 值
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
如果它是一个空字符串,它将设置为空,然后也为真。
您实际上可以在最新版本的 MySQL 中使用 IF 语句。
IF(expr,if_true_expr,if_false_expr)
IE:
SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors
如果在 TSQL 中,您可以尝试:
SELECT IIF(a.addressid IS NULL, 0, 1) AS addressexists
SQL Server 应该可以工作
不定期副业成功案例分享