使用单个查询更新MySQL中的100ks行而不知道密钥

时间:2010-11-20 21:35:52

标签: php mysql

我最后一个问题归结为这个主题,我没有得到确切答复:

我从一个表中选择数据,在数据上运行某些任务,然后将新数据插入第二个表。如果新数据与表2中的现有行匹配,那么我想进行更新。问题是,没有关键来检查欺骗。如果新数据行与基于2个字段的现有行匹配,那么它将被视为欺骗,在这种情况下需要更新。

我见过最接近答案的是: http://www.karlrixon.co.uk/articles/sql/update-multiple-rows-with-different-values-and-a-single-sql-query/

然而,我不确定这是否是我应该进入的正确方向。

2 个答案:

答案 0 :(得分:1)

修改你的第二个表以添加一个唯一的键,它是两列的组合,然后使用INSERT ... ON DUPLICATE KEY UPDATE

编辑:

为了清楚起见,索引不仅限于单个列。您可以创建一个列组合的索引:

ALTER TABLE table2 ADD UNIQUE INDEX(column1, column2);

答案 1 :(得分:0)

让我们看看 - 你有两个表,你想创建第三个表而没有任何重复。这很容易 - 首先,重复一个表。第二,我们将从另一个表中选择与第一个表没有重复的行。

INSERT INTO table3 (table3.col1, table3.col2 )
(SELECT table1.src, table1.col1, table1.col2
FROM table1 WHERE table1.col1 NOT IN (SELECT col1 FROM table2));

col1是您检查复制的位置。查询会很慢。