在 WHERE 中使用多个 BETWEEN 优化 SQL

Posted

技术标签:

【中文标题】在 WHERE 中使用多个 BETWEEN 优化 SQL【英文标题】:Optimize SQL with multiple BETWEENs in WHERE 【发布时间】:2021-02-16 13:16:22 【问题描述】:

我有一个这样的查询:

SELECT [...]
FROM [...]
WHERE 
FirstInt BETWEEN 100 AND 200 AND
SecondInt BETWEEN 100 AND 200

这些变量必须在同一范围内。有什么办法可以写。比如“(a || b) 在 100 到 200 之间”?

【问题讨论】:

用您正在使用的数据库标记您的问题。另外,大概列的类型是int '有什么办法吗' - 没有。 “优化”通常并不意味着让它更短或更容易编写。这通常是为了提高性能。 【参考方案1】:

我不确定这是否是您要寻找的:

SELECT [...]
FROM [...]
WHERE least(FirstInt , SecondInt, ... ) >= 100
AND greatest(FirstInt , SecondInt, ... ) <= 200

通过此查询,您将找到所有列中的最小值(函数最少)并将其与您的范围的最小值进行比较。您将对所有列的最大值(函数最大)执行相同的操作,并将其与范围的最大值进行比较。

这是一个小演示:

DEMO

使用此查询,您可以替换语句之间的多个,或者换句话说,当您想要将多个列与同一范围进行比较时,您可以使用它。

【讨论】:

嗨@Martin,我现在知道我没有。感谢您的帮助,我在回答中的查询已针对我添加的演示进行了个性化,但我同意这对 OP 有更多帮助。干杯! 没关系,我应用了两次,;-) 两者并行工作总是有风险。不用担心【参考方案2】:

我可能不完全理解这个问题,但我认为你可以使用它。

SELECT [...]
FROM [...]
WHERE 
FirstInt >= 100 AND FirstInt<=200 OR
SecondInt >= 100 AND SecondInt <= 200

【讨论】:

我想让它更短。我有许多变量必须位于同一范围之间。 @Mukeyii - 但是您希望 所有 都在 100 到 200 之间,还是可以让 任何一个 在那个范围?

以上是关于在 WHERE 中使用多个 BETWEEN 优化 SQL的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:索引具有多个 BETWEEN 表达式的 WHERE 子句

oracle数据库优化

sql关于索引的优化部分

在“WHERE”中的“CASE”语句中的“THEN”之后使用“Between”运算符

TO_DATE 然后在 WHERE 中使用 BETWEEN

数据库常见面试题