【问题标题】:Delete duplicate records for specific criteria | MS Access删除特定条件的重复记录 |微软访问
【发布时间】:2020-09-14 02:48:08
【问题描述】:

基本上我有以下称为Table1 的列OrderNumBook 对于每个OrderNum,不应该有任何类型的Book 的重复记录,如果需要识别和删除它。

例如:

OrderNum 1 应该只列出一次 Book1,因此查询必须识别为 OrderNum 1 列出的另外 2 个 Book1 并删除它们。

OrderNum 4 应该只列出一次 Book2,因此查询必须识别为 OrderNum 4 列出的另一个 Book2 并将其删除。

查询运行后 Table1 应该是这样的:

我正在使用 MS Access 查询,但我正在寻找一种也适用于 mySQL 查询的解决方案。

【问题讨论】:

  • 订单#2怎么了?这里似乎缺少数据。
  • 怎么样?订单 #2 没有列出重复的图书,因此没有要删除的记录。订单 #3 也是如此。

标签: mysql ms-access


【解决方案1】:

我不知道如何在 MySQL 或 Access 上优雅地执行此操作,因为您的表没有主键列,这是它理应拥有的。在 Access 上,您可以尝试创建一个新表,然后使用以下查询填充它:

INSERT INTO yourNewTable (OrderNum, Book)
SELECT DISTINCT OrderNum, Book
FROM yourTable;

然后,在完成上述查询后删除yourTable

如果您的表中有主键/自增列,比如id,那么您可以直接使用以下删除语句:

DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE t2.OrderNum = t1.OrderNum AND
                    t2.Book = b1.Book AND
                    t2.id < t1.id);

对于每个(OrderNum, Book) 组合,这将在重复项中留下恰好具有最低 id 值的单个记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多