【发布时间】:2014-02-20 23:34:40
【问题描述】:
我有一份 .csv 格式的股票清单。我无法更改 csv,需要通过 Access 2007-2013 进行所有验证。
我创建了一个追加查询,以将我的数据从 CSV 导入到表中。
INSERT INTO Table1 ( tblfield1, tblfield2, tblfield3, tblfield4 )
SELECT [File#csv].[columnname1], [File#csv].[columnname2], [File#csv].[columnname3], [File#csv].[columnname4]
FROM [File#csv] IN '' [Text;FMT=Delimited;HDR=YES;CharacterSet=437
;DATABASE=c:\your\filepath\here];
我需要它做的是不重复导入,似乎解决方案是将数据导入临时表,然后从那里复制而不重复。
INSERT INTO destTable
SELECT Field1,Field2,Field3,...
FROM srcTable
WHERE NOT EXISTS(SELECT *
FROM destTable
WHERE (srcTable.Field1=destTable.Field1 and
SrcTable.Field2=DestTable.Field2...etc.)
)
(SQL 取自:Copy rows from one table to another, ignoring duplicates)
然而,这似乎是一个糟糕的解决方案。有没有办法在查询中使用左连接来同时完成这两项任务?
编辑:我取得了一些进展。
INSERT INTO tblDestination ( destfield1, destfield2, destfield3, destfield4 )
SELECT filename1.[field1], filename1.[(field2], filename1.[field3], filename1.[field4]
FROM [Text;FMT=Delimited;HDR=YES;CharacterSet=437)
;DATABASE=D:\your\file\path].filename.csv AS filename1 LEFT JOIN tblDestination ON filename1.[fieldX] = tblDestination.destfieldX
WHERE (((filename1.[FieldX])= Is Null));
编辑:解决方案是
INSERT INTO tblDestination ( destfield1, destfield2, destfield3, destfield4 )
SELECT filename1.[field1], filename1.[(field2], filename1.[field3], filename1.[field4]
FROM [Text;FMT=Delimited;HDR=YES;CharacterSet=437)
;DATABASE=D:\your\file\path].filename.csv AS filename1 LEFT JOIN tblDestination ON filename1.[fieldX] = tblDestination.destfieldX
WHERE (((tblDestination.Field1) Is Null) AND ((tblDestination.Field2) Is Null));
【问题讨论】:
标签: sql ms-access csv ms-access-2007 ms-access-2013