2016-09-30 1 views
1

Ich bin ein wenig grob auf meinem SQL und ich versuche herauszufinden, wie nur die Einträge der Tabelle erhalten werden, die beide auf Quelle und Ziel identisch sind.Wie finden Sie Abfragen, die in jeder Richtung gleich sind?

habe ich eine kleine db hier: 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]  

ich zu finden, dass ich versuche, wenn Sie die Route A-> B und B-> A haben, wird es diese Einträge zurück. Also sollte meine Abfrage (1,3) und (3,1) zurückgeben.

Antwort

1

Sie waren auf dem richtigen Weg mit einem Self-Join, aber Ihre Join-Bedingung hatte ein Problem. Sie wollen Routen mit den folgenden Eigenschaften erhalten:

  • Das Ende der ersten Route ist der Start der zweiten Route
  • Der Start der ersten Route ist das Ende von die zweite Route


In der Abfrage unten, wähle ich nur die Starts jedes passende Route, da die Enden wi Ich werde Duplikate eines anderen Starts sein.

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 

Demo hier:

SQLFiddle

+0

Warum auch nicht setzt den 'r1.Start = r2.Destination' in den Kriterien kommen,? – Turo

0

SELECT r1.Start, c.Name VON WEGE r1 INNER JOIN r2 WEGE ON r1.Destination = r2.Start
INNER JOIN Städte c ON r1.Start = c.ID

Sie müssen nur den einzigen Rest "r1.Destination = r2.Start" put von DB-Engine behandelt wird

Verwandte Themen