从结果中筛选出不包含一列的重复行?

时间:2011-06-27 11:13:14

标签: mysql sql duplicates duplicate-removal

我有一张这样的表 -

uid  test1  test2  test3  test4  test5
10    x1     x2     x3     x4     x5
11    x6     x7     x8     x9     x10
12    x11    x12    x13    x14    x15
13    x16    x17    x18    x19    x20
14    x16    x17    x18    x19    x20
15    x21    x22    x23    x24    x25
16    x26    x27    x28    x29    x30

从上面的表中可以看出,uid 13和14的行对除了uid之外的所有列都有相同的值。

所以我想过滤除了列uid之外的所有行具有完全相同的值(即列uid可以推迟值),在最终结果中我想要重复行或类似行的行 它的uid列是所有重复的,以逗号分隔的格式。

预期结果 -

uid    test1  test2  test3  test4  test5
10      x1     x2     x3     x4     x5
11      x6     x7     x8     x9     x10
12      x11    x12    x13    x14    x15
13,14   x16    x17    x18    x19    x20
15      x21    x22    x23    x24    x25
16      x26    x27    x28    x29    x30

我尝试使用DISTINCTROW,但它要求所有列都相同才能将行视为重复。

任何建议表示赞赏。

编辑:我使用MYSQL作为数据库。

2 个答案:

答案 0 :(得分:2)

按照您希望在输出中显示的列进行分组,对要显示为列表或列表的列应用GROUP_CONCAT()

SELECT
  GROUP_CONCAT(uid),
  test1, test2, test3, test4, test5
FROM atable
GROUP BY test1, test2, test3, test4, test5

答案 1 :(得分:0)

你可以使用CONCAT小组(专栏来测试重复值)。

或尝试使用此处给出的查询: http://oscarvalles.wordpress.com/2008/01/28/sql-distinct-on-one-column-only/

然后使用GROUP_CONCAT合并与特定列重复的列 (除了你的情况以外的所有情况)。