0

私は2つのテーブルを持っています

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

テーブルBの範囲内にあるテーブルAからすべての行を選択したい

ありがとう

4

2 に答える 2

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は書く

鍵で困っています!クエリは非常に長く実行されます。テーブル a には 40,000 行を超え、テーブル b には 140 万行を超えています...テーブル内に関係はありません – ノーマン 3 秒前

はい、各 A をすべての B = 40k * 1.4M の比較と比較する可能性があるためです。

しかし、あなたの質問は「これを行うにはどうすればよいか」であり、「これが私がやっている方法です。どうすれば速くできるか」ではありません。

より速くしたい場合は、B(start, end); にインデックスを追加する必要があります。

于 2010-08-05T19:35:33.380 に答える
0
SELECT a.* FROM a
INNER JOIN b ON
  a.timemarker BETWEEN b.start AND b.end
GROUP BY a.id 

これはもっと安いほうがいいと思います。もちろん、追加のインデックスも役立ちます:)

于 2010-12-13T16:25:30.810 に答える