MySQL - SELECT Returns 模糊空值

MySQL - SELECT Returns Vague Null Value

请看查询:

 SELECT Id
   FROM TableA
  WHERE ColumnA = 'foo'
  ORDER BY Id DESC
  LIMIT 1

基本上,我希望查询获取 TableA 上的最新条目(列 IdAI ) 具有规定的条件 ColumnA = 'foo'.

查询会运行顺利,return正是我所需要的。如果没有匹配条件 ColumnA = 'foo' 的 table 条目,则结果为 null.

话虽如此,我在 return 1 中添加了 CASEELSE,return Id。以下是新查询:

 SELECT CASE
            WHEN Id IS NULL
            THEN 1
            ELSE Id
        END
   FROM TableA
  WHERE ColumnA = 'foo'
  ORDER BY Id DESC
  LIMIT 1

使用给定的查询,如果条件为假,则不会有任何结果。它是空白的。甚至不是 NULL。

问题是,这是为什么呢?在我看来,结果应该是 1.

这里有一个 Fiddle link 供您测试:http://sqlfiddle.com/#!9/a8e3af/3

注意: 如果我使用 MAX 而不是将结果限制为 1,这将起作用。我只是想知道为什么这个解决方案不起作用。

ID 永远不会为空,因为没有行被 returned,并且永远不会执行 CASE WHEN。解决方法是这样的:

SELECT COALESCE(MAX(ID), 1) AS ID
FROM (
  SELECT  ID
  FROM TableA
  WHERE ColumnA = 'G'
  ORDER BY Id DESC
  LIMIT 1
) s

(聚合查询将始终 return 一行,如果 ID 被 returned 则使用 MAX(ID) ,如果子查询中没有行 returned 则使用 null )

你可以试试这个可能对你有用

SELECT IFNULL(Id,1) as ID
FROM TableA
WHERE ColumnA = 'foo'
ORDER BY Id DESC
LIMIT 1