Sql如何使用合并值删除重复记录?

时间:2012-12-16 13:36:33

标签: mysql sql

如何使用合并值删除重复记录?

我的表有id(整数pm键),val1(文本),val2(文本)。

现状:

------------------

 id  val1    val2

 1.  john     sam
 2.  larry    tom
 3.  john     joe

我希望:

---------------

 id  val1    val2

 1.  john     sam, joe
 2.  larry    tom
...

非常感谢你的帮助。

4 个答案:

答案 0 :(得分:2)

据我所知,你不能这样做,你不能在一个查询中UPDATEDELETE。但是,您可以执行以下两个UPDATEDELETE查询:

UPDATE Table1 t1
INNER JOIN
(
  SELECT val1, GROUP_CONCAT(val2 SEPARATOR ',') Val2
  FROM Table1
  GROUP BY val1
) t2 ON t1.val1 = t2.val1
SET t1.val2 = t2.val2;

DELETE t
FROM table1 t
WHERE id NOT IN
(
  SELECT ID
  FROM
  (
    SELECT MIN(ID) id, val1
    FROM table1
    GROUP BY val1
   ) sub
 );

这将进行您想要的更改。

请注意:您必须将这两个查询放在一个TRANSACTION中。

SQL Fiddle Demo

这两个查询将使您的表格如下:

| ID |  VAL1 |    VAL2 |
------------------------
|  1 |  john | sam,joe |
|  2 | larry |     tom |

答案 1 :(得分:1)

这是一个想法草图:

1)创建临时表,如:

select val1, min(id) min_id, group_concat(val2) val2
from table
group by val1

2)更新id = temp.min_id

的记录的val2

3)删除val1 = temp.val1和id!= min_id

的记录

答案 2 :(得分:1)

你可以用这个

   SELECT val1, GROUP_CONCAT(val2 SEPARATOR ',') val2  FROM your_table t1
   INNER JOIN your_table t2 ON  t2.id = t1.id

     WHERE t2.val1 = t1.val1

  GROUP BY  t1.val1

答案 3 :(得分:0)

你有答案如何制作你要求的东西。我想知道你是否真的想以这种方式合并价值?你不需要新桌子吗?

主表

id  val1    

1.  john    
2.  larry  

新表:

idMain val2

1 sam
1 joe
2 tom
相关问题