2016-05-13 7 views
0

Ich habe eine Tabelle mit zwei Spalten, die manchmal durch ihre IDs gepaart sind. Ich würde gerne prüfen, ob ich bis jetzt alles richtig gemacht habe und die verbundenen Einträge korrekt verbunden sind. Die Tabelle sieht ungefähr so ​​aus:Testen, ob verbundene Zeilen in einer Tabelle wirklich verbunden sind

ID | (...) | partnerID 
====================== 
1 | (...) |  5 
2 | (...) |  3 
3 | (...) |  2 
4 | (...) |  7 
5 | (...) |  1 
6 | (...) | null 
7 | (...) |  4 
8 | (...) | null 

Gibt es eine Möglichkeit, mit einer Abfrage zu überprüfen, ob alle Verbindungen vorhanden sind? Etwas wie "for all partnerIDs check if their partnerIDs are this ID"?

Mein Wissen über SQLite ist wirklich grundlegend, daher bin ich mir nicht einmal sicher, was genau zu googeln ist. Es wäre toll, wenn einige von euch mir helfen könnten.

Wenn es einfach nicht möglich ist ein „Nein“ würde auch groß sein;)

Antwort

1

für jede Zeile den Partner zu finden, an der die Tabelle mit sich selbst:

SELECT p1.ID, 
     p2.ID 
FROM MyTable AS p1 
JOIN MyTable AS p2 ON p1.partnerID = p2.ID; 

den Partner zu finden Partner, fügen Sie eine andere beitreten:

SELECT p1.ID, 
     p2.ID, 
     p3.ID 
FROM MyTable AS p1 
JOIN MyTable AS p2 ON p1.partnerID = p2.ID 
JOIN MyTable AS p3 ON p2.partnerID = p3.ID; 

Sie nun, ob p1 und p3 Spiel überprüfen:

SELECT p1.*, 
     p2.* 
FROM MyTable AS p1 
JOIN MyTable AS p2 ON p1.partnerID = p2.ID 
JOIN MyTable AS p3 ON p2.partnerID = p3.ID 
WHERE p1.ID != p3.ID; 

Alle diese Verknüpfungen ignorieren Zeilen mit NULL (ohne Übereinstimmungen). Um falsche Partnerschaften zu erfassen, bei denen eine Richtung NULL ist, machen Sie die zweite Verbindung zu einer äußeren Verbindung:

SELECT p1.*, 
     p2.* 
FROM MyTable AS p1 
JOIN MyTable AS p2 ON p1.partnerID = p2.ID 
LEFT JOIN MyTable AS p3 ON p2.partnerID = p3.ID 
WHERE p1.ID IS NOT p3.ID; 
Verwandte Themen