MySQL:选择两列之间的数值

19

我正在尝试在2列之间选择一个值。这是我的数据集:

id    from    to    price
1     0.00    2.00  2.50
2     2.00    3.00  3.00
3     3.00    4.00  4.50

如果我的值是2,我的目标是选择在从和到之间的ID 1行。这是我正在使用的查询:

select * from table where 2 between from and to;

这是执行此查询时MySQL返回的结果:

id    from    to    price
1     0.00    2.00  2.50
2     2.00    3.00  3.00

我需要的结果是下面这样的:

id    from    to    price
1     0.00    2.00  2.50

我尝试使用<和>等符号,但是始终会得到两个结果。希望能得到帮助,非常感谢。


如果您的值为“2”,那么查询将与列“to”或“id”匹配? - hjpotter92
如果我的值为2,则我的目标是选择ID为2的行。你的样本结果是ID=1,这是什么? - D'Arcy Rittich
4个回答

36

你可以尝试这个:

SELECT * FROM `table` WHERE 2 BETWEEN `from` AND `to`

3
我不明白为什么这个回答会被踩,它是一个完全正确的答案! - tftd
1
@tftd,它被下投票了,因为它基本上是已经在问题中提出的相同查询。此外,这个SQL查询不做问题作者要求做的事情。 - Tim Groeneveld

14

所以,您不希望下限包含在内,对吗?

SET @value = 2;
SELECT * FROM table WHERE from > @value AND @value <= to;

我会用简单易懂的英语告诉你。如果我的值在从和到之间(包括列“to”),那么我就选择价格。所以,如果我的值是2,则结果必须是Id 1。如果我的值是2.001,则结果必须是Id 2。 - user390749
@nblmedia 但是你的数据有一个小问题:第二条记录的下边界与第一条记录的上边界完全相等,因此两个区间都被包括在内(我的意思是,2既是[0,2]的元素,也是[2,3]的元素)。因此,要么定义一个开放条件,就像Vikdor提出的那样,要么定义真正为空的截距区间。 - Barranka

9

查询 1:

select * 
from `table` 
where `from` < 2 and `to` >= 2

SQL Fiddle示例

输出:

| ID | FROM | TO | PRICE |
--------------------------
|  1 |    0 |  2 |     3 |

查询 2:

select * 
from `table` 
where `from` < 2.001 and `to` >= 2.001

输出:

| ID | FROM | TO | PRICE |
--------------------------
|  2 |    2 |  3 |     3 |

注意:使用这种方法,如果不修改查询以适应这一点,则无法获取值为0的行。

你的第一个答案是正确的:select * from table where 2 > from and 2 <= to。它适用于其他值。 - user390749
@nblmedia 我的两个查询是相同的。我只是提供了你的两个数据示例,22.001 的输出。 - D'Arcy Rittich

1

您也可以尝试这个,

select * from table where (from-to) = 2  // if you want the exact distance to be 2 
select * from table where (from-to) >= 2 // Distance more than 2 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接