0

好的,这是我的问题,并没有因为将公司实践放在互联网上而被解雇的原因而过于具体。

制作了电子表格。这些被上传到数据库。我需要从上传中过滤掉重复项。做到这一点的唯一方法是确保每个条目的两个字段与数据库中已有的条目不同。因为一个字段相同并不意味着它是重复的。有两个特定字段让我们称它们为 FLDA 和 FLDB,它们都必须与数据库中的条目匹配。我已经可以按一个字段过滤了。我认为这必须是一个子查询,但我不确定如何应用它。这很难描述。只要问你是否不确定我的意思。

4

7 回答 7

1

我有一个类似的问题。我的解决方案是:

  1. 导入临时表。
  2. 删除重复项
  3. 将剩余的内容复制到活动表中

这是一个小 BFI,但它只是简单的工作。

于 2008-08-22T16:17:52.673 回答
1

查询适合吗?例如:

INSERT INTO ToUpdate ( Field1, Field2 )
SELECT e.H1, e.H2
FROM (SELECT * FROM [Sheet1$] IN '' [Excel 8.0;HDR=YES;IMEX=1;database=C:\Docs\LTD.xls]) As e
LEFT JOIN ToUpdate ON (e.H2 = ToUpdate.Field2) AND (e.H1 = ToUpdate.Field1)
WHERE ToUpdate.Field1 Is Null AND ToUpdate.Field2 Is Null
于 2008-08-23T22:34:33.647 回答
0

您如何将它们加载到数据库中?这是用你自己的代码来读取 Excel 文件吗?您可以使用带有正确连接字符串的 ADO/ADO.NET 读取 Excel 文件。然后,您可以使用可以清除受骗者的查询来读取数据。

于 2008-08-22T16:25:18.597 回答
0

基于 CodeSlave 的回答,Access 提供了一个 Find Duplicates Query 向导,可以帮助您轻松构建查询以清除重复项。

另一种方法是在 FLDA 和 FLDB 上设置身份。这将防止重复条目甚至被写入表中。当然,您还需要捕获插入操作失败时引发的异常。

于 2008-08-23T21:33:32.640 回答
0

我通过使用删除查询然后使用Select from Table 1 Group by X Having Y, Z, A. 然后我为前端用户设置了运行查询按钮。

为你的所有帮助干杯。

于 2008-09-29T16:16:33.400 回答
0

是否存在用于识别重复项的字段 FLDC?我认为必须有,否则将 (FLDA,FLDB) 作为唯一键或主键将立即解决您的问题。

假设有这样一个领域,你可以尝试这样的事情:

SELECT T1.FLDA, T1.FLDB, T1.FLDC
FROM Table1 T1, Table1 T2
WHERE T1.FLDA = T2.FLDA
  AND T1.FLDB = T2.FLDB
  AND T1.FLDC <> T2.FLDC

这里的缺点是原始和副本都将被这样的东西返回。如果您只想查看重复项,您可能必须找出一种方法来识别“原始”行并为此添加另一个或两个 WHERE 子句。

如果您可以得到一个只给您重复行而不是原始行的查询,那么将其更改为 DELETE 查询应该很容易。

于 2008-08-25T14:23:49.020 回答
0

为避免导入重复:

1 - 如果表上还没有主键,则在 FLDA 和 FLDB(一起)上放置一个。如果已经有一个不是 FLDA 和 FLDB(一起)的主键,则在这两个字段上的表上放置一个索引,唯一的是,忽略空值否。

2 - 您可以使用向导或查询从电子表格导入表格。如果您使用导入电子表格向导执行此操作,您将在导入开始之前看到此消息:

“数据库名称无法将所有数据附加到表中。

“删除了 0 条记录中的字段内容,并且 (xx) 条记录因密钥违规而丢失。(这些丢失的记录是重复的,所以那里没有真正的损失。)......你还是要继续吗?”

单击“是”从电子表格中导入行。不会导入任何重复项。

或者,要使用查询进行导入,请将其粘贴到 sql 视图中的新查询中(菜单:插入 > 查询 > 设计视图,关闭按钮;菜单:视图 > SQL 视图。)

INSERT INTO tblInput
  SELECT XLS.* 
  FROM tblInput AS T RIGHT JOIN
    [Excel 8.0;IMEX=1;HDR=Yes;DATABASE=c:\data.xls;].[Sheet1$] AS XLS 
    ON T.FLDA = XLS.FLDA AND T.FLDB = XLS.FLDB
  WHERE ISNULL(T.FLDA) AND ISNULL(T.FLDB);

将路径 c:\data.xls 更改为您的路径,将 Sheet1$ 更改为您的工作表名,将 tblInput 更改为您的表名,并将 FLDA 和 FLDB 更改为您的列名。如果电子表格没有标题(列名),请将 HDR=Yes 更改为 HDR=No

于 2008-09-16T07:51:07.143 回答