如何在SQL中从对中查找所有三元组?

时间:2016-11-27 16:23:56

标签: sql sqlite

假设我使用SQLite查询语法。

我有一张点之间的距离表:

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

如果我知道p1p2之间的距离,那么我知道p2p1之间的距离 - 这两行都在表格中。

我想为所有独特的三元组创建一个视图(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 个答案:

答案 0 :(得分: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;