有没有办法在 sqlite ?
中进行以下操作select name
from table
where number >= ALL (<subquery, "such as select x from table ...">)
具体来说,无论我如何格式化查询,我都会在ALL
操作员之后遇到语法错误。在我搜索解决方案的谷歌搜索中,我发现ALL
的语法在sqlite中有所不同,但我似乎无法弄清楚。
有人可以向我展示基本的ALL (<subquery>)
语句如何在SQLITE中起作用吗?或让我知道他们是否根本不起作用?
我怀疑sqlite中有一个all()操作员。但是,您可以使用Max()和Min()。
编写功能等效的内容SELECT name
FROM table
WHERE number >= (SELECT MAX(another_number) FROM another_table WHERE ...)
sqlite确实有一个全关键字。但是,它没有做您想要的。(幸运的是, @Lawrence的答案确实如此。)
虽然不允许所有关键字作为Where表达的一部分,但关键字可以出现其他几个位置。
来自http://www.sqlite.org/lang_select.html:
选择全 * ...
全部或不同的关键字之一可以遵循简单选择语句中的选择关键字。如果简单的选择是选择全部,则将由SELECT返回整个结果行。如果不存在或不同的情况,则行为似乎是指定的。
选择...联合全部选择...
使用Union创建的化合物SELECT所有操作员都将所有行返回联合所有操作员左侧的所有行,以及从选择到右侧的所有行。工会运营商的工作方式与联合所有人相同,但从最终结果集中删除了重复行。
sqlite没有所有操作员。您可能很想写这样的东西:
select ... where number >= (select max(...) from ...);
但是,这是不是在所有情况下等同于原始查询。如果子查询没有结果,则number
大于所有结果(真实的真实)。但是零数字的最大值为null, number >= NULL
是false(或者,三元逻辑中的未知,最终被视为false)。
以下查询等效于使用所有查询,包括用于空的结果情况:
select ... where not exists (select * from ... where number < X);