2013-10-01 45 views
1

希望標題有道理!如何使用組連接獲取'其他'重複值?

鑑於這些值的表MyTable的

ID TheValue 
    A   1 
    B   2 
    C   3 
    D   1 
    E   1 
    F   2 

我可以使用

SELECT 
    TheValue, 
    group_concat(concat) AS TheIDs 
FROM (
    SELECT distinct 
     TheValue, 
     ID AS concat 
    FROM MyTable) 
GROUP BY TheValue 

得到

TheValue TheIDs 
    1   A,B,D 
    2   B,F 
    3   C 

我怎麼能代替獲得ID的結果,TheValue和'其他'ID,不包括該行的ID

ID  TheValue OtherIDs 
    A   1  D,E 
    B   2  F 
    C   3  <null> (or empty string, I don't mind) 
    D   1  A,E 
    E   1  A,D 
    F   2  B 

(我使用的情況下,SQLite的答案是方言具體)

+0

根據您的示例數據不應該在第一行所要的結果是'A | 1 | D,E'而不是'B,D'? – GarethD

+0

糟糕,是的,你是對的。我已經編輯它爲了其他人看這 – user2834566

回答

1

我認爲你需要做一個自我聯接:

SELECT T.ID, 
     T.TheValue, 
     GROUP_CONCAT(T2.ID) AS TheIds 
FROM T 
     LEFT JOIN T T2 
      ON T2.TheValue = T.TheValue 
      AND T2.ID != T.ID 
GROUP BY T.ID, T.TheValue; 

Example on SQL Fiddle

+0

啊,這似乎是伎倆!謝謝 – user2834566

0

從你的問題的第一預期輸出意味着在某種程度上,你需要規範化的數據庫方案,並比如說,你的價值是一個ID,你的ID是價值!

SELECT 
    TheValue, 
    group_concat(ID) AS TheIDs 
FROM MyTable 
GROUP BY TheValue 

應該做的工作(至少在MySQL中,我認爲也在sqlite中)。

+0

真正的應用程序涉及教育中使用的一個大型應用程序。表格的每一行都包含一個Staff_ID和他們所教課程的ClassCode。然而,同一班可能會由幾位不同的老師教授。對於表格中的每位工作人員,我需要知道還有誰在教這門課程(不包括他們自己)。恐怕你的解決方案似乎沒有達到預期的結果。 – user2834566