2016-11-27 5 views
0

私はSQLiteクエリ構文を使用すると仮定します。SQLのペアからすべてのトリプルを見つけるには?

Iは、点間の距離のテーブルを持っている:

CREATE TABLE d (
    p1 INT, 
    p2 INT, 
    distance REAL 
); 

Iはp1p2との間の距離を知っていれば、私はp2p1間の距離を既知 - 両方の行がテーブル内にあります。

すべてのユニークなトリプルポイントについてビューを作成して、3つのペアのすべてのペア間の距離を知りたいとします。

私は次のことを試してみました:

CREATE VIEW triple as 
    select d1.p1 as p1, d2.p1 as p2, d3.p1 as p3 
    from d as d1, d as d2, d as d3 
    where d1.p1=d3.p2 and d1.p2=d2.p1 and d2.p2=d3.p1; 

をしかし、私はのような転位を取り除く方法がわからない:

1 | 2 | 3 
2 | 3 | 1 
3 | 1 | 2 

私のビューのための高速かつ正確なselectクエリとは何ですか?

+1

はこのお試しください:ここでは一つの方法である 'WHERE d1.p1

答えて

1

すべてがのペアの場合、ペアワイズの比較を使用できます。

CREATE VIEW triple as 
    select d1.p1 as p1, d2.p1 as p2, d3.p1 as p3 
    from d d1 join 
     d d2 
     on d1.p2 = d2.p1 join 
     d as d3 
     on d1.p1 = d3.p2 and d2.p2 = d3.p1 
    where d1.p1 < d1.p2 and d3.p1 < d3.p2; 
+0

私はすべてのペアを持っていない - 私の視点は、すべて見つけることです私がペアを持っているポイントのトリプル、ペアごとに。しかし、あなたのソリューションが私の状況でも機能するかどうかを判断しようとしています。 –

関連する問題