15

有没有办法在SQLite中执行以下操作?

select name
from   table
where  number >= ALL (<subquery, "such as select x from table ...">)

ALL具体来说,无论我如何格式化查询,我都会在运算符之后收到语法错误。在我搜索解决方案时,我发现有人提到ALLSQLite 中的语法不同,但我似乎无法弄清楚。

有人可以告诉我基本ALL (<subquery>)语句在 SQLite 中是如何工作的吗?或者让我知道他们是否根本不工作?

4

3 回答 3

13

我怀疑SQLite中有一个ALL()运算符。但是,您可以使用 MAX() 和 MIN() 编写功能等效的内容。

SELECT name 
FROM table 
WHERE number >= (SELECT MAX(another_number) FROM another_table WHERE ...)
于 2012-11-01T01:29:07.380 回答
4

SQLite 确实有一个 ALL 关键字;但是,它不会做你想做的事。(幸运的是,@lawrence 的回答确实如此。)

虽然 ALL 关键字不允许作为 WHERE 表达式的一部分,但该关键字可以出现在其他几个地方。

来自http://www.sqlite.org/lang_select.html

全选 * ...

ALL 或 DISTINCT 关键字之一可以在简单的 SELECT 语句中跟在 SELECT 关键字之后。如果简单 SELECT 是 SELECT ALL,则 SELECT 返回整个结果行集。如果 ALL 或 DISTINCT 都不存在,则行为就像指定了 ALL。

选择...联合所有选择...

使用 UNION ALL 运算符创建的复合 SELECT 返回 UNION ALL 运算符左侧的 SELECT 中的所有行,以及右侧的 SELECT 中的所有行。UNION 运算符的工作方式与 UNION ALL 相同,只是从最终结果集中删除重复行。

于 2013-11-25T04:40:50.777 回答
3

SQLite 没有 ALL 运算符。你可能会想写这样的东西:

select ... where number >= (select max(...) from ...);

但是,这并不等同于所有情况下的原始查询。如果子查询没有结果,则number大于所有结果(空虚为真)。但是零个数的最大值为 NULL,并且number >= NULL为假(或者更确切地说,在三元逻辑中未知,最终被视为假)。

以下查询等同于使用 ALL 的查询,包括空结果情况:

select ... where not exists (select * from ... where number < X);
于 2017-10-12T23:05:21.327 回答