我有一个处理CSV文件上传的网站,并将其插入到数据库中。 CSV模板是229个字段,每个文件有多行。由于有多行,有时两个CSV文件可能有来自前一个文件的记录,我想避免重复。
我将CSV文件当前上传到230字段临时表(比自动递增主键的CSV多一个字段),然后将它们拆分为更小的表。
我的问题:上传CSV时,我希望任何已经存在的记录都会被覆盖或忽略,以便我只有每个229字段记录中的一个。
有没有办法在登台牌上这样做,所以我不必担心小桌子?
答案 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中的值