我有下面两张表,
表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 中删除所有额外的条目。
我尝试编写程序,但有些无法执行所需的工作。
表格如下,
任何帮助将不胜感激。
最佳答案
根据您的评论,这似乎应该符合您的要求。它从 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/