2011-03-29 14 views
0

id、 'points'と座標の表が与えられていると、すべての 'pointids'の間の距離のリストを取得できるようにビューを作成したいと思う(私はビューにする必要があると思う) 「所定の2つ(外部キー)IDSsql select join view

入力テーブルビューを所望

pointid (key), foreign_key, x, y 
01,   id_x,  6, 2, 
71,   id_x,  6, 1, 
02,   id_y,  5, 9, 
34,   id_z,  3, 8 
42,   id_z,  2, 3, 

ため、全てID_Xに属する点とid_y間の距離を得る:

pointid_1,  pointid_2, distance 
01,   02,  12 (or whatever distance is between 6,2 and 5,9) 
71,   02,  12 (or whatever distance is between 6,1 and 5,9) 

別のクエリは次のようになり、間の距離LL ID_Xに属するポイントとid_z:

01,   34,  33 (distance between 6,2 and 3,8) 
01,   42,  nn 
71,   34,  nn 
71,   42,  nn 

など

私は距離計算SQRT(....)を行うことができますが、参加して、距離計算をすることを組み合わせて行う方法がわかりませんまたはそのようなビューの適切なクエリが上記の結果を生成するものであるかどうかを判断する。これは、距離カルク

+0

どのように途中でポイントを注文しますか?あなたのポイントとそれに沿った注文ポイントで 'ルート'を分ける方法を理解したら、それぞれのポイントに対して '次の'ポイントを与えるビューを作成します。最後のポイントについては、次のポイントは最後のポイント(距離ゼロ)になります。距離を計算して合計するのは簡単です。 – 9000

+0

わかりません。目的は、ポイントに沿った「ルート」を見つけることではなく、各ポイント間の距離を2つのIDに合わせることです。最終的には、クエリは距離順に並べられますが、ポイントに沿ったルートは試してみません。私はそのカートージン製品を考えているが、それが何であるかを100%確信しているわけではない。 – hanlonj

+0

ルートに沿った距離(私が思ったように)ではなく、各ポイントのペア間の距離だけが必要な場合は、テーブル自体を結合するだけです。 – 9000

答えて

1
create view PAIRWISE_DISTANCE_SQUARES as 
select 
    a.id as a_id, 
    b.id as b_id, 
    (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) as square 
from point_table as a, point_table as b 
-- where a.id != b.id if you wish 

ためにロードされた数学のlib拡張でsqlite3の使用されるだろう

このビューは、あなたのポイント間の距離の二乗を与えるだろう。 SQLiteにはsqrtがありませんが、実際の距離と同様に並べ替えには問題ありません。

+0

それは私が後になったことです。私はそれを考えていなかった仕事をしている正方形についての良い点を示しています。 _実際には、ビュー内の '外部キー'列も必要ですが、ここから取得します_ – hanlonj