Room / SQLite查询,使用min(...),如果没有找到任何结果,则不返回任何结果

xpszyzbs  于 2023-04-30  发布在  SQLite
关注(0)|答案(1)|浏览(153)

目前停留在一个SQL路障,我没有运气找到任何答案,我的问题,由于如何通用的相关词语。
我有两个问题,看起来完全一样,但产生的结果不同。
对于这些示例,假设没有带有id 123的条目,并且MyTable具有以下列:idtimedata
一个查询针对的是不存在所有列的条目

SELECT id, data, time FROM MyTable WHERE id = 123

它不返回任何结果。
另一个查询也是针对不存在所有列的条目

SELECT id, data, min(time) FROM MyTable WHERE id = 123

它返回一个结果,其中每列的值为null
Android Studio中的示例:
不返回任何结果,如所需x1c 0d1x
返回一个所有列均为null的结果

即使我将列命名为相同的名称

,也会发生相同的问题
我试图在第二个查询中实现与第一个查询相同的行为;如果没有结果,则不返回任何结果,而不是返回一个结果,其中所有列的值都为null。
我知道我可以通过做一个子查询来解决这个问题,但是我更喜欢使用像上面一样简单的单个查询。
这是不可能的吗?还是有一种方法可以在Android Room Library / SQLite中实现这一点?
编辑:这个问题最初是不正确的,感谢用户在评论中我意识到每当在查询中使用min(...)时都会出现这个问题,所以我更新了这个问题以反映正确的问题。

ws51t4hk

ws51t4hk1#

这一点:

SELECT id, data, min(time) FROM MyTable WHERE id = 123

是一个没有GROUP BY子句的聚合查询,因此它将始终返回恰好1行。
如果你希望它在WHERE子句中的条件失败时不返回任何东西,请使用EXCEPT

SELECT id, data, min(time) FROM MyTable WHERE id = 123
EXCEPT
SELECT null, null, null; -- as many null columns as the main selection

或者,在没有GROUP BY子句的聚合查询中使用带有HAVING子句的SQL的 * 非标准SQL* 功能(这在其他数据库中不起作用):

SELECT id, data, min(time) FROM MyTable WHERE id = 123
HAVING id IS NOT NULL;

或者,使用GROUP BY子句:

SELECT id, data, min(time) FROM MyTable WHERE id = 123
GROUP BY id
HAVING id IS NOT NULL;

参见demo

相关问题