有没有办法在 SQLite 中执行以下操作?
select name
from table
where number >= ALL (<subquery, "such as select x from table ...">)
具体来说,无论我如何格式化查询,我在ALL
运算符后都会出现语法错误。在我的Google搜索解决方案中,我发现有人提到ALL
的语法在SQLite中有所不同,但我似乎无法弄明白。
有人能告诉我基本的ALL (<subquery>)
语句在SQLite中是如何工作的吗?或者让我知道他们根本不工作?
答案 0 :(得分:12)
我怀疑SQLite中有ALL()运算符。但是,您可以使用MAX()和MIN()来编写功能相同的东西。
SELECT name
FROM table
WHERE number >= (SELECT MAX(another_number) FROM another_table WHERE ...)
答案 1 :(得分: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相同,只是从最终结果集中删除了重复的行。
答案 2 :(得分:2)
SQLite没有ALL运算符。你可能想写这样的东西:
select ... where number >= (select max(...) from ...);
但是,在所有情况下, 等同于原始查询。如果子查询没有结果,则number
大于所有结果(vacuously true)。但是零的最大值为NULL,number >= NULL
为假(或者更确切地说,三元逻辑中的未知,最终会被视为假)。
以下查询等同于使用ALL的查询,包括空结果案例:
select ... where not exists (select * from ... where number < X);