0

Perl 5.10 访问 2010

大家好,

我有一个表,其关键字段不太正确,定义了 AUTOINCREMENT 但不是PRIMARY KEY。因此,具有重复键值的行已找到进入表的方式。我需要以编程方式清除重复的行,每个键值只留下一行,这将是唯一的。

假设行已经按顺序排列,这样的事情应该可以完成:

DECLARE @prevClientId = "XXX";
DECLARE @currClientId = "XXX";
DECLARE csr CURSOR FOR SELECT [Client ID] FROM [Entity Client] FOR UPDATE;
OPEN csr;
FETCH csr INTO @currClientId;
DO {
  IF( @currClientId != @prevClientId) {
      @prevClientId = @currClientId; ) {
  } else {
      DELETE FROM [Entity Client] WHERE CURRENT OF csr;
  }
  FETCH csr INTO @currClientId;
} UNTIL SQLSTATE = '02000';
CLOSE csr;

这应该遍历每一行并删除其键值与前一行的键值匹配的每一行。

问题: 1 - MS Access 是否允许使用游标?如果是,如何在 perl 脚本中编写代码?如果不是,还有什么办法可以单步遍历表格的每一行?这与简单地循环遍历 $sth->fetchrow_arrayref 的结果不同,因为在扫描了所有行之后,您正在处理内存中的结果。

关于如何以编程方式从 Access 表中删除重复行的任何其他建议将不胜感激。

TIA,

仍在学习的史蒂夫

4

1 回答 1

0

您可以将重复项拉到单独的表中

SELECT [Client ID], count(*)  
FROM [Entity Client]
GROUP BY [Client ID]
HAVING count(*) > 1
ORDER BY [Client ID]

然后重新添加具有唯一 id 的行,最后删除重复的行

于 2013-08-21T01:40:47.373 回答