有沒有辦法使用單個SQL查詢爲每行更新具有不同值的多行?我必須用不同的數據更新許多行中的一個柱。對每一行使用單獨的更新查詢似乎過多,因此如果可能的話,我想將此過程合併到單個SQL語句中,或者至少減少所需的查詢數。MySql UNION更新
我使用PHP與Zend框架和MySql。
有沒有辦法使用單個SQL查詢爲每行更新具有不同值的多行?我必須用不同的數據更新許多行中的一個柱。對每一行使用單獨的更新查詢似乎過多,因此如果可能的話,我想將此過程合併到單個SQL語句中,或者至少減少所需的查詢數。MySql UNION更新
我使用PHP與Zend框架和MySql。
創建臨時表並填寫:
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
我知道這適用於SQL Server中,所以它的價值在MySQL一試。
您可以根據您的不同行構建case語句。
不知道關於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
對不起,正如我所說我不知道MySQL的語法。這將在MS SQL Server上工作。也許MySQL中有一種不同的語法,允許UPDATE表和JOIN一起使用? – Kristen 2014-04-29 12:25:55
它可以在MySql中使用,但是如果您沒有在每個條目上更改列表,其他列表都將設置爲空。 – user63371 2009-02-14 18:49:28