我在Access 2007中有两个表,每个表定义一个ValueFrom和ValueTo列来表示一个范围,例如从1到10或从7到15。
我试图弄清楚如何发出一个返回两个表中重叠范围的查询。我觉得我错过了一些东西......
鉴于这两个表:
Table01
ValueFrom ValueTo
1 10
5 15
25 50
500 600
Table02
ValueFrom ValueTo
1 12
16 24
30 40
45 100
500 600
我希望这是输出
RESULTS FROM QUERY
Table01_ValueFrom Table01_ValueTo Table02_ValueFrom Table02_ValueTo
1 10 1 12
5 15 <emptystring> <emptystring>
25 50 30 40
25 50 45 100
500 600 500 600
上述结果表明表01中的1-10范围与表02中的1-12范围重叠;表01中的5-15范围与表02中的任何Table02范围不重叠。 2502范围与表02,30-40和45-100中的两行重叠。
请注意,此查询必须检测部分和全范围重叠。
关于这个的任何想法?可以使用psuedocode甚至就如何解决这个问题提出建议。虽然我可以编写一个程序来执行上述操作,但我尝试使用单个Access查询来解决。
谢谢!
答案 0 :(得分:1)
在普通的SQL中,您可以将其作为JOIN
:
select t1.ValueFrom, t1.ValueTo, t2.ValueFrom, t2.ValueTo
from table01 as t1 left join
table02 as t2
on t1.ValueFrom <= t2.ValueTo and t1.ValueTo >= t2.ValueFrom;
不幸的是,MS Access不允许JOIN
条件下的不等式。所以,这是另一种方式:
select t1.ValueFrom, t1.ValueTo, t2.ValueFrom, t2.ValueTo
from table01 as t1,
table02 as t2
where t1.ValueFrom <= t2.ValueTo and t1.ValueTo >= t2.ValueFrom
union all
select t1.ValueFrom, t1.ValueTo, NULL, NULL
from table01 as t1
where not exists (select 1
from table02 as t2
where t1.ValueFrom <= t2.ValueTo and t1.ValueTo >= t2.ValueFrom
);