以多次插入为条件
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 Server
和 pydb
。
在此先感谢您的帮助! :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)
电子邮件列上的索引将使它尽可能快,但仍然比正常插入慢。
我有很多记录需要插入到一个已经很大的 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 Server
和 pydb
。
在此先感谢您的帮助! :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)
电子邮件列上的索引将使它尽可能快,但仍然比正常插入慢。