首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中执行复杂范围查询

问如何在MySQL中执行复杂范围查询
EN

Stack Overflow用户
提问于 2011-11-21 22:27:28
回答 2查看 102关注 0票数 0

我有一个包含整数字段(字段B)的表(表A)。对于表A的每一行,我想在字段B的整数值周围构造一个+/- 100的范围,然后从字段B中查找在这些范围内的所有值。需要对字段B中的所有值执行查询。查询需要返回每个行范围内的每一行。下面是我想要做的一个例子:

代码语言:javascript
复制
Table A
_______
A    1000    
B    3000    
C    5000    
D    1090   

使用上面的表A,查询将首先找到字段B中所有整数的范围(+/- 100)。

代码语言:javascript
复制
900 - 1100
2900 - 3100
4900 - 5100
990 - 1190

然后,查询将遍历这些范围,并返回表A中在生成的范围内的行。使用上面的示例,查询将返回:

代码语言:javascript
复制
A    1000
A    1000
B    3000
C    5000
D    1090
D    1090

A和D会被返回两次,因为它们都在自己的范围内。如何构造一个查询来返回位于每行范围内的每一行?提前感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-21 22:31:30

代码语言:javascript
复制
SELECT t2.*
FROM tableA AS t1
INNER JOIN tableA AS t2 ON t2.fieldB >= (t1.fieldB - 100) AND t2.fieldB <= (t1.fieldB + 100)

A不应该也显示两次吗,因为它也在D的范围内?(上面的问题就是这种情况-如果不正确,请详细说明原因^^)

票数 5
EN

Stack Overflow用户

发布于 2011-11-21 22:45:15

从每个表A记录的最里面的前置限定符开始...然后再次重新联接到表A。我已经添加了资格组范围低和嗨,以显示您正在寻找的资格赛基础…除了D出现两次之外,A也应该出现两次,因为它也符合“D”的范围。

代码语言:javascript
复制
select 
      a2.ShowLetter,
      a2.FieldB,
      GrpRanges.RangeLow,
      GrpRanges.RangeHi
   from 
      ( select distinct 
              a1.FieldB - 100 as RangeLow,
              a1.FieldB + 100 as RangeHi
           from
              TableA a1 ) GrpRanges

      JOIN TableA a2
         on a2.FieldB between GrpRanges.RangeLow and GrpRanges.RangeHi
   order by 
      a2.ShowLetter
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8213354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档