多列范围

时间:2012-01-29 19:44:52

标签: mysql sql

我有一个包含2列的表,可乐和colb,它们代表一系列数字。

示例问题:

cola - colb
1    - 10
11   - 22
33   - 66
67   - 67
  • 如果输入是7-8,我想要一个提取范围1-10的查询。
  • 如果输入是67 - 80,我想要一个提取67 - 67
  • 的查询

示例查询:

SELECT * 
  FROM example 
 WHERE vala >= cola 
   AND valb <= colb

第一个标准适用于上述查询,但是当cola = colb即67-67时,它就会失效。


以上是我的问题的一个简单示例..问题实际上是一系列Ips。 可乐 - Colb2 = Ip范围。我已经包含了以上示例中缺少的内容。

   SELECT *
     FROM `static_allocation`

    WHERE INET_ATON('$network_addr')   >= INET_ATON(network_addr)
      AND INET_ATON('$broadcast_addr') <= INET_ATON(broadcast_addr)

    LIMIT 1

编辑:

好的,看起来我有点不对..

表格数据

10.0.0.0 - 10.0.0.15 
10.0.0.16 - 10.0.0.16

然而,当我尝试选择10.0.0.16 - 10.0.0.20时,它找不到记录..

1 个答案:

答案 0 :(得分:1)

如果您正在寻找至少包含部分区块的第一个范围,请尝试以下条件:

vala <= colb and cola <= valb

这表示搜索范围[vala,valb]必须与目标范围[cola,colb]部分重叠。

在SQL中:

select  *
from    example
where   vala <= colb and cola <= valb
order by
        cola -- Lowest network range
limit   1