MySQL - SELECT返回Vague Null Value

时间:2015-12-09 08:44:58

标签: mysql select case

请查看查询:

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

基本上,我希望查询在 TableA (列 ID AI )上获取最新条目,条件为 ColumnA ='foo'

查询将顺利运行并返回我需要的内容。如果没有与 ColumnA ='foo'条件匹配的表条目,则结果为 null

话虽如此,我添加了一个 CASE 来代替 1 ELSE ,返回 ID 。以下是新查询:

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

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

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

以下是您测试的小提琴链接:http://sqlfiddle.com/#!9/a8e3af/3

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

2 个答案:

答案 0 :(得分:2)

ID永远不会为null,因为不返回任何行,并且永远不会执行CASE WHEN。解决方法是这样的:

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

(聚合查询将始终返回一行,如果返回ID,则返回MAX(ID);如果子查询没有返回任何行,则返回null)

答案 1 :(得分:2)

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

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