如何使用合并值删除重复记录?
我的表有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
...
非常感谢你的帮助。
答案 0 :(得分: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中。
这两个查询将使您的表格如下:
| 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
的记录的val23)删除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