SQL删除多个条件重复记录

Posted

技术标签:

【中文标题】SQL删除多个条件重复记录【英文标题】:SQL delete multiple criteria duplicate records 【发布时间】:2018-04-25 20:36:50 【问题描述】:

我有一张表,除了一个字段(例如 col4)外,所有字段都有重复记录。我只需要删除 t1.col4 字段为空白的重复条目。

ID  Col1   Col2   Col3   Col4
1   Joe     1      2      Yes
2   Sue     1      2      
3   Joe     2      3      
4   Joe     1      2      

目标:仅删除 ID 4

我已经尝试过内部连接(我认为 msaccess 不允许这样做)和存在错误的 WHERE EXISTS/IN 技术。

Exists 技术删除 t1.col4 为空的所有记录(不仅仅是子查询中匹配的记录):

DELETE t1.*
  FROM t1
  WHERE Exists (
    SELECT t1.col1, t1.col2, t1.col3
      FROM t1
      Group by t1.col1, t1.col2, t1.col3
      HAVING Count(*) > 1
    )
    AND t1.col4 Is Null;

我已经尝试过多次迭代 Inner Join 技术,但我在这里读到的所有内容都表明 Access 不支持它。如果有帮助,很高兴发布我尝试过的内容。我还尝试将子查询写入临时表,然后尝试删除与内部联接匹配的记录。

【问题讨论】:

添加一些输入数据(不是图像!)和预期结果。 【参考方案1】:

您需要一个相关的子查询:

DELETE t1
  FROM t1
  WHERE EXISTS (SELECT t1.col1, t1.col2, t1.col3
                FROM t1 as tt1
                WHERE t1.col1 = tt1.col1 AND t1.col2 = tt1.col2 AND t1.col3 = tt1.col3 AND t1.id <> tt1.id
               ) AND
        t1.col4 Is Null;

【讨论】:

Close... 看起来您已经准备就绪,但忘记了 GROUP BY 语句。 哇......到目前为止,即使没有 group by,我的测试也能完美运行。你们对我来说太聪明了。有没有什么地方我可以读到为什么/何时需要相关子查询? 另外有趣的是为什么表别名在子查询中有效,但在父查询中无效。

以上是关于SQL删除多个条件重复记录的主要内容,如果未能解决你的问题,请参考以下文章

连接多个表后如何从sql查询结果中删除重复记录

sql 如何过滤重复记录

在 SQL/HiveQL 中删除具有旧 id 的重复记录

几个删除重复记录的SQL语句

SQL语句删除重复的记录

SQL联表进行更新与删除(使用联表条件)