当前位置: 首页 > 面试题库 >

删除条件很少的所有重复主题

谭景福
2023-03-14
问题内容

我正在尝试使sql删除所有重复的标题,但必须在以下情况下删除重复的标题:

  • 必须只删除具有相同 object_id的* 重复项 *
  • 必须仅保留最新记录(最大的 topic_id )(topic_id是每个主题AI的唯一ID)

到目前为止,我已经做到了(使用select进行测试…)

SELECT topic_id,object_id,title,url,date 
FROM topics GROUP BY title 
HAVING ( COUNT(title) > 1) 
ORDER BY topic_id DESC

但是不符合条件。
我正在使用mysql。


问题答案:

在中MySQL,您无法DML为子查询中的操作指定目标表(除非您将目标表嵌套的深度超过一层,但是在这种情况下,您将无法获得可靠的结果,也无法使用相关的子查询)。

使用JOIN

DELETE  td
FROM    topics td
JOIN    topics ti
ON      ti.object_id = td.object_id
        AND ti.title = td.title
        AND ti.topic_id > td.topic_id;

创建索引topics (object_id, title, topic_id)以使其快速运行。



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 在MySQL中删除重复的行 (25个答案) 3个月前关闭。 如何从MySQL表中删除所有重复数据? 例如,具有以下数据: 我会使用,如果它是一个查询。 我该怎么做才能只删除重复项并仅保留每个记录一个? 问题答案: 编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。 注意:您 需要 首先在表的 测试副本 上执行此操作! 完成此操作后,我发现,除

  • 我有两张桌子——桌子1和桌子2。 它们有相同的列——Col1、Col2、Col3、Col4(整数)。 我将Table_2行插入Table_1。 表_1和表_2有一些基于Col1和Col2的重复值。我需要保留表_2的值,并删除表_1的重复值。 例如: 我尝试了以下方法-

  • 我有一个数据集,如下所示: 但不管用。

  • 问题内容: 我有三列的表:,和 有重复的字段。我想删除所有具有相同的行为别人 ,除了 对最近更新的一个。 因此,如果表包含这些行: 然后,我只想保留这些行: 您如何在SQL中做到这一点?我想象会从具有重复值的行中删除单个random(?)行,但是如何使其除最近更新的行之外的 所有 行删除呢? 问题答案: 您可以使用左联接来执行此操作: 这意味着对于每一行,它会寻找更新日期最近的另一行,如果有更新日

  • 我有两个表,一个有复合主键,另一个有外键。它们都设置为删除时级联。问题是,当我从主表中删除一个复合键集“name:John date:02.02.2018”时,所有John行都会从带有外键的表中删除,但是可以有一个集合“name:John date:04.04.2018”以及日期为02.02的所有行。也删除了一些行,如何才能使其删除仅匹配外键集的行? 更新:

  • 问题内容: 我想从下表中删除多个重复的键: 希望它像 我正在使用mysql。这是可能的吗?我不能使用 查询来进行唯一的输入,因为我希望将这些重复的输入输入到表中。 问题答案: 一种方法是使用将表联接到子查询上。子查询得到最低为每。当记录在子查询上不匹配时,仅表示它没有匹配的记录并且可以安全地删除。 SQLFiddle演示 但是,如果的记录可以具有不同的名称,则您需要在子句中包括它们,否则将仅保留最