1

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

我有带有 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

4 回答 4

2

UPDATE据我所知,你不能这样做,你不能DELETE在一个查询中。但是,您可以将其作为两个查询来执行UPDATE,如下所示:DELETE

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 小提琴演示

这两个查询将使您的表看起来像:

| ID |  VAL1 |    VAL2 |
------------------------
|  1 |  john | sam,joe |
|  2 | larry |     tom |
于 2012-12-16T14:03:39.503 回答
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
于 2012-12-16T14:01:43.063 回答
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 的记录

于 2012-12-16T13:48:18.803 回答
0

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

主表

id  val1    

1.  john    
2.  larry  

新表:

idMain val2

1 sam
1 joe
2 tom
于 2012-12-16T20:50:05.023 回答