[英]updating million rows based on resultset from previous query
我需要更新包含百萬行的表
有兩個表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>
);
您為什么不能簡單地像下面這樣。 雖然我真的沒有看到需要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進行更新。 像下面這樣
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.