2009-02-13 135 views
4

有沒有辦法使用單個SQL查詢爲每行更新具有不同值的多行?我必須用不同的數據更新許多行中的一個柱。對每一行使用單獨的更新查詢似乎過多,因此如果可能的話,我想將此過程合併到單個SQL語句中,或者至少減少所需的查詢數。MySql UNION更新

我使用PHP與Zend框架和MySql。

回答

7

創建臨時表並填寫:

CREATE TEMPORARY TABLE temptable (id INTEGER, VALUE VARCHAR(200)) 

INSERT 
INTO temptable 
VALUES 
    ('1', 'val1'), 
    ('2', 'val2'), 
    ('3', 'val3'), 
    ('4', 'val4') 

然後問題:

UPDATE 
    mytable m, temptable t 
SET m.value = t.value 
WHERE m.id = t.id 
0

我知道這適用於SQL Server中,所以它的價值在MySQL一試。

您可以根據您的不同行構建case語句。

+0

它可以在MySql中使用,但是如果您沒有在每個條目上更改列表,其他列表都將設置爲空。 – user63371 2009-02-14 18:49:28

2

不知道關於MySQL明確,但更新基於一個SELECT或多個SELECT查詢的UNION多行,我會做

UPDATE U 
SET MyColumn = T.OtherColumn 
FROM MyUpdateTable AS U 
    JOIN 
    (
     SELECT [OtherColumn] = OtherColumn1 
     FROM MyOtherTable1 
     WHERE ... 
     UNION 
     SELECT OtherColumn2 
     FROM MyOtherTable2 
     WHERE ... 
    ) AS T 
     ON T.ID = U.ID 

更新2014年10月28日,轉化爲工作MySQL:

UPDATE MyUpdateTable AS U 
    JOIN 
    (
     SELECT [OtherColumn] = OtherColumn1 
     FROM MyOtherTable1 
     WHERE ... 
     UNION 
     SELECT OtherColumn2 
     FROM MyOtherTable2 
     WHERE ... 
    ) AS T 
     ON T.ID = U.ID 
     SET MyColumn = T.OtherColumn 
+0

對不起,正如我所說我不知道​​MySQL的語法。這將在MS SQL Server上工作。也許MySQL中有一種不同的語法,允許UPDATE表和JOIN一起使用? – Kristen 2014-04-29 12:25:55