MySQL - 根据条件更新表 1,并根据其他表 2 更新最大值(值)

标签 mysql sql view

我在 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/

相关文章:

PHP 写入数据库,发现发生了什么

mysql - 使用子查询的返回结果对 SQL 查询进行排序

php - 如何让 laravel DB 连接到 php 连接?

php - MySQL 条件选择 2 个字段中的 1 个,然后按 2 个字段的组合分组

MySQL 事务死锁,但 SHOW ENGINE INNODB STATUS 不显示真正的死锁

MySQL 内连接失败

mysql - 获取查询中先前记录的总和并添加或减去以下结果

sql - SQL Server 如何知道锁定 View 对象?

react-native - 带有向上箭头三角形的背景边框 View | react 原生

python - 如何在 Django 中使用 MySQL View ?