2010-08-05 63 views
0

我的兩個表與MySQL從一系列選擇特定日期

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

選擇任意A是任何內[B.start,B.end]

select a.* 
from 
table a 
where exists (select * from table b where a.timemarker between b.start and b.stop) 
; 

的OP寫入

我的鑰匙有問題!該查詢執行很長。我在表中有超過40k行,表b超過140萬行...表中沒有關係 - 諾曼3秒前

是的,因爲你可能會比較每個A和每個B = 40k * 1.4M比較。

但是你的問題是「我該如何做到這一點」,而不是「我是如何做到這一點的,我怎樣才能做得更快」。

如果你希望速度更快,你需要在B(start,end)上添加一個索引;

+0

我的鑰匙有問題!該查詢執行很長。我已經在桌上超過40K行,並在表B超過140萬行... 有沒有關係內表 – Norman 2010-08-05 19:50:07

+0

我已經添加了鍵,但仍然...慢... 查詢: (從其中b.start之間a.timemarker = '2010-07-19 7點44分25秒' 選擇*和b.stop )的選擇b。*從b 其中存在 – Norman 2010-08-05 20:13:00

+0

我很抱歉..在德國的時候已經很晚了..我充滿了狗屎...... – Norman 2010-08-05 20:13:26

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

我認爲這應該更便宜。當然,額外的索引也會有所幫助:)