请查看查询:
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,这将有效。我只是想知道为什么这个解决方案不起作用。
答案 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