MySQL - SELECT Returns 模糊空值
MySQL - SELECT Returns Vague Null Value
请看查询:
SELECT Id
FROM TableA
WHERE ColumnA = 'foo'
ORDER BY Id DESC
LIMIT 1
基本上,我希望查询获取 TableA 上的最新条目(列 Id 是 AI ) 具有规定的条件 ColumnA = 'foo'.
查询会运行顺利,return正是我所需要的。如果没有匹配条件 ColumnA = 'foo' 的 table 条目,则结果为 null.
话虽如此,我在 return 1 中添加了 CASE。 ELSE,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
请看查询:
SELECT Id
FROM TableA
WHERE ColumnA = 'foo'
ORDER BY Id DESC
LIMIT 1
基本上,我希望查询获取 TableA 上的最新条目(列 Id 是 AI ) 具有规定的条件 ColumnA = 'foo'.
查询会运行顺利,return正是我所需要的。如果没有匹配条件 ColumnA = 'foo' 的 table 条目,则结果为 null.
话虽如此,我在 return 1 中添加了 CASE。 ELSE,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