SQL查询重复记录,保留重复ID的列表

时间:2013-11-19 09:59:49

标签: mysql sql

在MySQL中,我想要删除重复的行,同时保留包含这些重复项的user_id列表:

user_id  message                lattitude   longitude   status  img_name 
------------------------------------------------------------------------------
3       hello test multiple     42.0473347  89.4525034  P       ced5m
4       hello test multiple     42.0473347  89.4525034  P       ced5m
5       hello test multiple     42.0473347  89.4525034  P       ced5m
6       hello test new          42.0473347  89.4525034  P       ced5WEXm
7       hello test new          42.0473347  89.4525034  P       ced5WEXm
8       hello test new          42.0473347  89.4525034  P       ced5WEXm

我想将3,4,5和6,7,8行折叠成:

user_id      message                lattitude   longitude   status  img_name 
-------------------------------------------------------------------------------------
3,4,5       hello test multiple     42.0473347  89.4525034  P       ced5m
6,7,8       hello test new          42.0473347  89.4525034  P       ced5WEXm

最好的方法是什么?

3 个答案:

答案 0 :(得分:4)

SELECT GROUP_CONCAT(`user_id` separator ',') as user_ids, 
       message,
       lattitude, 
       longitude, 
       status, 
       img_name    
   FROM table_name 
   GROUP BY img_name, message;

使用Above查询获得相关结果。

答案 1 :(得分:3)

试试这个:

SELECT GROUP_CONCAT(user_id separator ','),
  message,
  lattitude,
  longitude,
  STATUS,
  img_name
FROM YourTable
GROUP BY message,
  lattitude,
  longitude,
  STATUS,
  img_name

SQLFIDDLE DEMO

您可以删除部分GROUP BY列。请参阅here以评估其中是否有任何条件允许您删除它们以便在查询中获得更好的性能。

答案 2 :(得分:2)

您可能需要按列调整组:

select group_concat(user_id),
message,
lattitude,
longitude,
status,
img_name
from test
group by
message, img_name;

SQL小提琴: http://sqlfiddle.com/#!2/8b9b2/1