我有两张桌子
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范围内的所有行
谢谢
答案 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
我认为这应该更便宜。当然,额外的索引也会有所帮助:)