2016-09-30 50 views
1

我對我的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)。

回答

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 

演示這裏:

SQLFiddle

+0

爲什麼不把'r1.Start = r2.Destination'在連接標準,太? – Turo

0

SELECT r1.Start, c.Name FROM路徑R1 INNER JOIN R2 ROUTES ON = r1.Destination r2.Start
INNER JOIN城市c ON r1.Start = c.ID

你只需要把唯一的「r1.Destination = r2.Start」其餘由DB引擎處理

相關問題