使用MySQL选择范围内的特定日期

时间:2010-08-05 19:32:54

标签: mysql date-range

我有两张桌子

Table A: a_id,timemarker (datetime)

Table B: b_id,start (datetime), stop(datetime), cat(varchar)

table A

149|2010-07-19 07:43:45

150|2010-07-19 08:01:34

151|2010-07-19 07:49:12

table B

565447|2010-07-19 07:30:00|2010-07-19 08:00:00

565448|2010-07-19 08:00:00|2010-07-19 08:20:00

我希望从表A中选择表B范围内的所有行

谢谢

2 个答案:

答案 0 :(得分:0)

选择ANY [B.start,B.end]

中的任何A.
select a.*
from
table a 
where exists ( select * from table b where a.timemarker between b.start and b.stop)
;

OP写

  

我的钥匙有问题!查询执行的时间很长。我有超过4万行的表格和表格b超过140万行...表格内没有关系 - 诺曼3秒前

是的,因为您可能会将每个A与每个B = 40k * 1.4M的比较进行比较。

但你的问题是“我该怎么做”,而不是“我在做什么,如何让它更快”。

如果你想要更快,你需要在B上添加一个索引(开始,结束);

答案 1 :(得分:0)

SELECT a.* FROM a
INNER JOIN b ON
  a.timemarker BETWEEN b.start AND b.end
GROUP BY a.id 

我认为这应该更便宜。当然,额外的索引也会有所帮助:)