以多次插入为条件

Conditional on multiple insert

我有很多记录需要插入到一个已经很大的 table 中(table 有几百万行,我一次要插入几千行)。

当前使用的语法很简单:

INSERT INTO my_table (name, email) VALUES ('test','test@gmail.com'),('test2','test2@gmail.com')

这些请求是一次以 1000 行为一组进行的。

由于我无法控制的原因,我无法将 email 声明为唯一列(table 已经有重复列)。

如果在数据库中找到 email 值时,我如何向每个 INSERT 请求添加条件,从而跳过插入 email

假设在上面的请求中,我们发现我们已经有一个包含电子邮件 test@gmail.com 的行。我想跳过那一行但仍然插入另一行 (test2@gmail.com).

我正在努力寻找有效的语法。

使用 SQL Serverpydb

在此先感谢您的帮助! :D

这个查询应该有效

INSERT INTO my_table (name, email) 
SELECT name, email
FROM (VALUES ('test','test@gmail.com'),('test2','test2@gmail.com')) AS Vals(name, email)
WHERE NOT EXISTS (SELECT 1 FROM my_table x WHERE x.email = Vals.email)

电子邮件列上的索引将使它尽可能快,但仍然比正常插入慢。