2016-05-13 94 views
0

我有一個包含兩列的表,它們有時與它們的ID配對。我想檢查一下,如果我已經做好了一切並且連接的條目已正確連接。表看起來是這樣的:測試表中連接的行是否真正連接

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

有沒有辦法檢查查詢,如果連接都在那裏?像"for all partnerIDs check if their partnerIDs are this ID"

我對SQLite的知識確實很基礎,所以我甚至不確定谷歌究竟是什麼。如果你們中的一些人能幫助我,這將是非常棒的。

如果它是根本不可能的一個「不」將是巨大的爲好;)

回答

1

要找到每一行的合作伙伴,加入表本身:

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

要找到合作伙伴合作伙伴,再添加入:

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; 

您現在可以檢查是否p1p3匹配:

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; 

所有這些連接都會忽略帶NULL的行(不匹配)。 若要在一個方向爲NULL的情況下發現錯誤的合作伙伴關係,請將第二個加入外連接:

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;