mysql - 使用父表删除子表中不需要的记录

标签 mysql sql join sql-delete

我有下面两张表,

表A有,

primary key and a 
date field

表B有,

id : primary
table1-id : primary key of tableA
val1,val2,val3 are used to store numerics.

这里,对于 tableA 中的每个条目,tableB 中最多可以有两行。 但由于一些问题,tableB 中的每一行都插入了两条以上的记录。

我想在此处执行迁移任务,以从 tableB 中删除所有额外的条目。

我尝试编写程序,但有些无法执行所需的工作。

表格如下,

enter image description here enter image description here

任何帮助将不胜感激。

最佳答案

根据您的评论,这似乎应该符合您的要求。它从 tableB 中删除所有条目,其中 3 个 val 值均为 -1 并且 id 值至少具有tableB 中的 3 个对应行:

DELETE FROM tableB
WHERE val1 = -1 AND val2 = -1 AND val3 = -1
AND `table1-id` IN (SELECT `table1-id`
                    FROM tableB 
                    GROUP BY `table1-id`
                    HAVING COUNT(*) > 2)

在 MySQL 中,解决以下问题

Error Code: 1093 You can't specify target table 'tableB' for update in FROM clause

问题,将子查询中的tableB替换为(SELECT * FROM tableB) b,即

DELETE FROM tableB
WHERE val1 = -1 AND val2 = -1 AND val3 = -1
AND `table1-id` IN (SELECT `table1-id`
                    FROM (SELECT * FROM tableB) b
                    GROUP BY `table1-id`
                    HAVING COUNT(*) > 2)

此查询也适用于 SQL Server。

关于mysql - 使用父表删除子表中不需要的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58483283/

相关文章:

mysql - 需要按非数字条件和 GROUP BY 对所有行求和

python - Django View ,其中列从另一个表引用为外部列

sql - 将列类型从整数更改为字符串

sql - 是否可以找出 SQL Server 中有多少数据库数据早于 N 年?

sql - 根据额外重量计算运费

PHP/MySQL : Get last record of table in a Join AND row count of the joined table

c# - 在 LINQ 中连接两个列表

MySQL错误1005?

mysql - 将此子查询转换为 JOIN?

php - 从 MySQL 日期到 RFC822 日期格式的转换