【问题标题】:Optimize SQL with multiple BETWEENs in WHERE在 WHERE 中使用多个 BETWEEN 优化 SQL
【发布时间】: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
  • '有什么办法吗' - 没有。
  • “优化”通常并不意味着让它更短或更容易编写。这通常是为了提高性能。

标签: mysql sql performance


【解决方案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 之间,还是可以让 任何一个 在那个范围?
猜你喜欢
  • 2016-11-04
  • 2010-10-08
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多