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)

4

2 回答 2

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;

SQL Fiddle 示例

于 2013-10-01T11:31:36.710 回答
0

您问题的第一个预期输出暗示您需要以某种方式规范化您的数据库方案,也就是说,您的 Value 是一个 ID,而您的 ID 是值!

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

应该做这项工作(至少在 MySQL 中,我也认为在 sqlite 中)。

于 2013-10-01T11:30:53.647 回答