2016-11-27 90 views
0

假设我使用SQLite查询语法。如何从SQL中的对中找到所有三元组?

我有距离的点间表:

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

如果我知道p2p1之间p1p2然后我已知距离之间的距离 - 两行是在表中。

我想为点的所有唯一三元组创建一个视图(select查询),以便我知道它们之间的所有三个元素之间的距离是成对的。

我试过如下:

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

我不知道所有对 - 我的观点的一点是要找到所有成对的三倍点数。但我试图弄清楚你的解决方案是否也适用于我的情况。 –

相关问题