我需要更新一个包含百万行的表
有两个表table1和table2
SELECT ID
FROM (
select ID from table1 where<condition>
) as result1
INNER JOIN table2 ON result1.field=table2.field
GROUPBY table2.field
HAVING <condtion>
并且在这个@ resultset1 ID上,我必须更新表1
UPDATE table1
SET x=true
where ID EXISTS IN (@resultset1)
两个表中都有数百万行。我该怎么做?
任何人都可以说这有什么不对,我正在尝试一些替代加入
UPDATE table1 t1
SET x=true
WHERE <condition> AND EXISTS(
SELECT* FROM (
SELECT *
FROM table2 t2
WHERE t2.field = t1.field
) AS result
WHERE<condition on resultset field>
);
答案 0 :(得分:0)
为什么你不能像下面这样做。如果这是您的实际查询,我确实不需要提供group by
和having
。
UPDATE table1
SET x=true
where ID IN (
SELECT ID
FROM (
select ID from table1 where<condition>
) as result1
INNER JOIN table2 ON result1.field=table2.field
GROUPBY table2.field
HAVING <condtion>
)
另一个不错的选择是JOIN
两个结果集并执行UPDATE
之类的
UPDATE table1 t1
JOIN
(
SELECT ID
FROM (
select ID from table1 where<condition>
) as result1
INNER JOIN table2 ON result1.field=table2.field
GROUPBY table2.field
HAVING <condtion>
) X ON t1.ID = X.ID
SET t1.x=true
修改强>
您还可以将第一个查询的结果存储在临时表中(如a_horse_with_no_name所示),然后使用临时表的JOIN进行更新。 Somethig如下所示
create temporary table idtemp(ID INT);
insert into idtemp
SELECT ID
FROM (
select ID from table1 where<condition>
) result1
INNER JOIN table2 ON result1.field=table2.field
GROUPBY table2.field
HAVING <condtion>
最后进行更新,如
UPDATE table1 t1
JOIN idtemp it ON t1.ID = it.ID
SET t1.x=true
答案 1 :(得分:0)