2010-02-23 71 views
2

更新從組產生的所有項目現場我有一個選擇是這樣的:MYSQL - 如何通過select語句

SELECT field1, field2, field3 
FROM table WHERE field1= 5 AND field_flag =1 
GROUP BY field1, field2, field3 limit 1000; 

我要爲結果行更新field_flag。我怎麼能在MySQL中做到這一點?

回答

1

你的意思是你要更新,其中字段1,字段2和字段3在設定你的SELECT語句返回的表?

例如。

update table, 
    (select field1, field2, field3 
     FROM table WHERE field1= 5 AND field_flag =1 
     GROUP BY field1, field2, field3 limit 1000) temp 
set table.field_flag = 99 
where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3 

請注意,更新可能會更新超過1000行。

的臨時表可太習慣:

create temporary table temptab as 
select field1, field2, field3 
FROM table WHERE field1= 5 AND field_flag =1 
GROUP BY field1, field2, field3 limit 1000 

update table, 
     temptab temp 
set table.field_flag = 99 
where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3 

這有temptab以後可以使用,也該指標可以添加到加快更新的優點是:

create index on temptab (field1, field2, field3); 
+0

是的,這是我想要的。是否有可能也返回選擇結果,所以我不必查詢兩次?一次用於選擇,一次用於標誌更新。 – Nir 2010-02-23 13:27:58

+0

你可以執行你的選擇到一個臨時表並使用它。 創建臨時表temptab作爲選擇field1,field2,... 更新表,temptab set table.field = 99 where table.field1 = temptab.field1 and ... – Martin 2010-02-23 13:45:33

-1

如何:

UPDATE table SET field_flag = <newvalue> 
WHERE idfield IN (
    SELECT idfield 
    FROM table 
    WHERE <conditions> 
) 
+0

謝謝。但是沒有單一的idfield。 – Nir 2010-02-23 12:57:40