【问题标题】:Select BETWEEN column values选择 BETWEEN 列值
【发布时间】:2010-09-19 18:04:40
【问题描述】:

我正在尝试将 BETWEEN 与列名而不是直接值一起使用,如下所示:

SELECT * FROM table WHERE column1 BETWEEN column2 AND column3;

这将返回 17 行,但如果我写:

SELECT * FROM table WHERE (column1 <= column2 AND column1 >= column3) OR (column1 >= column2 AND column1 <= column3)

我得到大约 600 行.. 在这两种情况下,我只得到 column1 值实际上是中间值的行,但是第二种方法给了我更多的结果,所以第一种方法有问题。

我怀疑问题可能在于将 BETWEEN 子句与列名而不是纯值一起使用,并且 SQL 以某种方式将列名转换为实际值..这很奇怪,但是有人可以启发我吗? 谢谢

【问题讨论】:

  • 两年后阅读我的问题...甚至我都无法理解我期望查询如何工作...

标签: sql between


【解决方案1】:
SELECT * FROM table WHERE column1 BETWEEN column2 AND column3; # gives 17 rows

一样
SELECT * FROM table WHERE (column1 >= column2 AND column1 <= column3) # gives 17 rows

因为你添加了检查

(column1 <= column2 AND column1 >= column3)

这是ORed,你会得到额外的行。

【讨论】:

  • 哈。好的,所以在 column3 AND column2 之间添加一个额外的 column1 也可以解决它。这意味着 BETWEEN 子句的第一个值实际上是最小值,第二个值是最大值。感谢您的帮助
  • 我猜你没有看到我对另一个答案的评论。
【解决方案2】:

Between A And B 假定 A&lt;B,即,Between 中的第一个表达式 (A) 小于第二个表达式 (B) 它不检查或使用相反的选项执行.

例如,如果你输入Where 3 Between 4 And 2 没有行将被返回:

或者,如果你写了

Select Case When 3 Between 4 and 2 then 'true' else 'false' end

它将返回false

【讨论】:

    【解决方案3】:

    你对这两个语句的逻辑不一样:

    SELECT * FROM table WHERE (column1 <= column2 AND column1 >= column3) OR (column1 >= column2 AND column1 <= column3)
    

    有两个从句。删除第一个,您应该得到与 between 语句相同的结果。

    SELECT * FROM table WHERE (column1 >= column2 AND column1 <= column3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      相关资源
      最近更新 更多