1

2 つのテーブル t1 と t2 があります。

t1 にはフィールドがありますposition

t2 にはフィールドがありますstart&stop

私の内部結合は次のとおりです。

select  t1.* 
from    t1 inner join t2 on t1.position >= t2.start AND t1.Pos <= t2.stop

たとえば、次のように言います。

  • t1.position= 8のレコードの 1 つ
  • t2 にはt2.start = 1t2.end = 15;の 2 つのレコードがあります。そしてt2.start = 5そしてt2.end = 10

私のクエリは、1 < 8 < 15 と 5 < 8 < 10 として 2 つの行を返します。

私が欲しいのは最初の行だけですか?

どうすればこれを達成できますか?

4

2 に答える 2

0

結果セットに対して個別のクエリを実行するか、最初に内部クエリを使用することができます。小さなデータセットを扱っている場合は、個別のデータセットを使用します。それ以外の場合は、内部クエリを使用します。

明確:

select distinct t1.* from t1 inner join t2 on t1.position >= t2.start AND t1.Pos <= t2.stop

内部クエリ:

select t1.*
from t1
inner join
(
    select t1.position
    from t1
    inner join t2 on t1.position >= t2.start
        AND t1.position <= t2.stop
) t2 on t2.position = t1.position
于 2012-07-24T22:13:57.330 に答える
0
select t1.* from t1
inner join t2 
on t1.position >= t2.start 
AND t1.Pos <= t2.stop
LIMIT 1
于 2012-07-24T22:12:23.850 に答える