SQL避免重复插入staging / temp表

时间:2017-05-09 07:50:51

标签: mysql csv

我有一个处理CSV文件上传的网站,并将其插入到数据库中。 CSV模板是229个字段,每个文件有多行。由于有多行,有时两个CSV文件可能有来自前一个文件的记录,我想避免重复。

我将CSV文件当前上传到230字段临时表(比自动递增主键的CSV多一个字段),然后将它们拆分为更小的表。

我的问题:上传CSV时,我希望任何已经存在的记录都会被覆盖或忽略,以便我只有每个229字段记录中的一个。

有没有办法在登台牌上这样做,所以我不必担心小桌子?

2 个答案:

答案 0 :(得分:1)

如果以前导入的所有记录都在临时表中,您可以使用以下内容:

select *
from `table`
group by Col1, Col2, Col3 [,...]
having count(*) = 1
order by id asc;

基本上,选择所有记录,然后按要分隔它们的每一列对它们进行分组,并按组计数过滤结果(其中组计数> 1存在多个相同记录)。 在此之后,您只需要过滤掉新添加的记录。

但请记住,如果同一个csv文件中存在重复的可能性,则此方法将跳过它们。如果是这种情况,您可以先使用distinct作为数据集。

答案 1 :(得分:0)

首先将文件中的数据加载到temp_table中,然后运行查询

SELECT * FROM temp_table INTO target_table 
WHERE temp_table.value NOT IN (SELECT value FROM target_table)

此处temp_table.value是您定义复制的行是否已存在于target_table中的值