2016-09-30 9 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

セルフ・ジョインを行うと正しい軌道に乗っていましたが、ジョイン条件に問題がありました。あなたは、次のプロパティを持つルートを保持したい:

  • 終わり最初のルートのは、第2の経路
  • 最初のルートの開始開始では終わりのです以下のクエリでは、第2経路


、Iは、各マッチングルートの開始のみを選択する端部のWi以来他のいくつかのスタートの重複です。ここで

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 R1 インナーr1.Destination = r2.Start ON R2
をルートをJOIN ROUTES FROM INNER JOIN都市C ON r1.Start = c.ID

あなただけのDBエンジンによって処理されただけ「r1.Destination = r2.Start」休息を配置する必要があり