如何查找每个方向相同的查询?

时间:2016-09-30 05:49:28

标签: sql sqlite

我对我的SQL有点粗略,我试图弄清楚如何只获取源和目标上相同的表条目。

我在这里创建了一个小数据库:SQLFiddle

SELECT *
FROM Routes
INNER JOIN Cities src
ON (src.ID = Routes.Start)
INNER JOIN Cities dest
ON (dest.ID = Routes.Destination)
WHERE
    [Not sure what to put here]    

我试图找到如果您有路线A-> B和B-> A,它将返回这些条目。所以我的查询应该返回(1,3)和(3,1)。

2 个答案:

答案 0 :(得分:1)

您在进行自我加入时走在正确的轨道上,但您的加入条件存在问题。您希望保留具有以下属性的路径:

  • 第一条路线的 end 是第二条路线的 start
  • 第一条路线的 start 是第二条路线的 end


在下面的查询中,我只选择每个匹配路由的开头,因为结尾将是其他一些开头的重复。

SELECT r1.Start,
       c.Name
FROM ROUTES r1
INNER JOIN ROUTES r2
    ON r1.Destination = r2.Start AND
       r1.Start       = r2.Destination
INNER JOIN Cities c
    ON r1.Start = c.ID

在这里演示:

SQLFiddle

答案 1 :(得分:0)

SELECT r1.Start,        c.Name 来自路线r1 INNER JOIN ROUTES r2     ON r1.Destination = r2.Start
INNER JOIN CITY c     ON r1.Start = c.ID

  

你只需要把唯一的“r1.Destination = r2.Start”休息由数据库引擎处理