0

我正在使用 Access 数据库并有以下问题:

如何根据某些列删除整行?

例如我有下表:

Id | Name |   Desc  | Contact No. | 
1  | XYZ  | bla bla | 123456      | 
2  | ABC  | bla bla | 123456      |
3  | TUV  | hmmmmm  | 123456      |
4  | XYZ  | bla bla | 123456      |

我想删除所有具有重复信息的数据行,因此在本例中为第 1 行和第 4 行。当然,唯一的问题是 Id,它使整个行唯一......

我将如何去删除这个?是否有一些 SQL 代码可以处理这个问题?

4

2 回答 2

2

用于检测重复的自动加入:

DELETE FROM Table
WHERE Id IN
(
    SELECT t1.Id
    FROM Table t1
        INNER JOIN join Table t2
            ON t1.Name = t2.Name
            AND t1.[Desc] = t2.[Desc]
            AND t1.Contact = t2.Contact 
)

如果您只想为每个重复项保留一行,请查看以下问题:Deleting duplicate rows from a table

DELETE FROM Table
WHERE Id NOT IN
(
    SELECT MIN(Id)
    FROM Table
    GROUP BY Name, [Desc], Contact
)
于 2013-04-16T12:55:09.543 回答
2

如果你需要删除所有重复的行,你可以使用这个 Ms-Access SQL 查询:

DELETE tbl.Id
FROM tbl
WHERE (((tbl.Id) In (SELECT tbl.Id
  FROM
    (SELECT [Name], [Desc], [Contact]
     FROM tbl
     GROUP BY [Name], [Desc], [Contact]
     HAVING COUNT(*)>1)  AS [t1]
  INNER JOIN tbl
  ON ([t1].Contact = tbl.Contact)
     AND ([t1].[Desc] = tbl.[Desc])
     AND ([t1].[Name] = tbl.[Name]))));

要保留第一个副本,您可以使用以下命令:

DELETE tbl.Id
FROM tbl
WHERE (tbl.Id) Not In (SELECT Min(tbl.Id) AS MinId
FROM tbl
GROUP BY tbl.[Name], tbl.[Desc], tbl.[Contact]);
于 2013-04-16T13:06:29.660 回答