我对我的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)。
答案 0 :(得分:1)
您在进行自我加入时走在正确的轨道上,但您的加入条件存在问题。您希望保留具有以下属性的路径:
在下面的查询中,我只选择每个匹配路由的开头,因为结尾将是其他一些开头的重复。
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
在这里演示:
答案 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”休息由数据库引擎处理