MySQL - SELECT 返回模糊的空值
Posted
技术标签:
【中文标题】MySQL - SELECT 返回模糊的空值【英文标题】:MySQL - SELECT Returns Vague Null Value 【发布时间】:2016-03-14 11:00:26 【问题描述】:请看一下查询:
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
使用给定的查询,如果条件为假,则不会有任何结果。它是空白的。甚至不是 NULL。
问题是,为什么会这样?在我看来,结果应该是 1。
这是一个用于测试的 Fiddle 链接:http://sqlfiddle.com/#!9/a8e3af/3
注意: 如果我使用 MAX 而不是将结果限制为 1,这将起作用。我只是想知道为什么这个解决方案不起作用。
【问题讨论】:
如果没有匹配的行,使用第一个查询的结果也不应该为空。它应该是一个空的结果集。 【参考方案1】:ID 永远不会为空,因为没有返回任何行,并且永远不会执行 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)
【讨论】:
我明白了。这就是 CASE WHEN MAX(Id) IS NULL THEN 1 ELSE MAX(Id) END 在条件返回 false 时返回 1 的原因【参考方案2】:你可以试试这个可能对你有用
SELECT IFNULL(Id,1) as ID
FROM TableA
WHERE ColumnA = 'foo'
ORDER BY Id DESC
LIMIT 1
【讨论】:
谢谢阿什。我正在寻找为什么给定的查询没有返回任何问题而不是解决方法。无论如何,谢谢你的时间。 +1以上是关于MySQL - SELECT 返回模糊的空值的主要内容,如果未能解决你的问题,请参考以下文章
在存储在 hdfs 中的 orc 文件上创建外部表后,select * 返回时间戳的空值
antdesign中可以用select组件实现对表单的搜索吗?