在 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 子句