我在 MySQL 中遇到了一个小问题。 这里有两个表:
表1:id,值1,值2
表2:id,表1_fk
在 table1 中,有一些重复行,其中 value1 和 value2 相同(但 id 不同)。
我想从 table1 中删除重复行并保留 ID 最高的行。
但首先我需要链接 table2 中的行,该行链接到重复项(具有最低 ID),然后再删除它们。
非常感谢您对我的帮助。
到目前为止:
CREATE OR REPLACE VIEW duplicateTable1 as
SELECT *
FROM table1 t1
WHERE EXISTS (SELECT t2.id
FROM table1 t2
WHERE t1.value1= t2.value1
AND t1.value2= t2.value2
AND t1.id <> t3.id)
order by value1, value2;
CREATE OR REPLACE VIEW duplicatetable2 as
SELECT *
FROM table2 t2
WHERE t2.table_fk in (
SELECT d.id
FROM duplicateTable1 d
);
Update table2 t2
Set t2.subscription_fk = (
SELECT Max(d.id)
FROM duplicateTable1 d
where d.id=t2.subscription_fk
GROUP BY d.value1, d.value2
);
最佳答案
CREATE TEMPORARY TABLE tmp
SELECT MAX(id) as id, value1, value2
FROM table1 GROUP BY value1, value2;
UPDATE table2
JOIN table1 t1 ON t1.id = table1_fk
JOIN tmp t ON t.value1 = t11.value1 AND t.value2 = t11.value2
SET table2.table1_fk = t.id;
DELETE FROM table1 WHERE id NOT IN (SELECT id FROM tmp);
关于MySQL - 根据条件更新表 1,并根据其他表 2 更新最大值(值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22836308/