【问题标题】:MySQL - Update table1 from a condition and a max(value) from other table2MySQL - 从一个条件更新 table1 并从其他 table2 更新一个最大值(值)
【发布时间】:2014-04-03 11:32:13
【问题描述】:

我在 MySQL 中有一个小问题。 这里有两张表:

table1: id, value1, value2

table2: id, table1_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
);

【问题讨论】:

    标签: mysql sql view


    【解决方案1】:
    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);
    

    【讨论】:

    • 完美运行。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多