2016-08-24 71 views
0

是否有任何方式批量更新多個表格?我發現使用單個批量更新的解決方案以及使用單個查詢更新多個表。但是,然後尋找一個綜合解決方案。使用MySQL批量更新多個表格

eg:目前這樣做。

UPDATE a, b, c 
SET a.address = "$address", b.address = "$address", c.address = "$address" 
WHERE a.id = b.a_id AND a.id = c.a_id AND a.id = 123 

UPDATE a, b, c 
SET a.address = "$address", b.address = "$address", c.address = "$address" 
WHERE a.id = b.a_id AND a.id = c.a_id AND a.id = 234 

這是我目前腳本更新每個地址一個接一個。

要更新單個查詢我可以像使用多個條目,

UPDATE a SET address = CASE 
    WHEN id = 123 THEN 'address1' 
    WHEN id = 234 THEN 'address2' 
    END 

有沒有辦法將這些查詢組合,更新多個表,以及在單個查詢多行?

謝謝

+0

檢查:HTTP: //stackoverflow.com/a/9417254/2815635 – C2486

+0

上面的鏈接告訴如何只更新多個表。但我需要批量更新。不是一個一個。 –

回答

1

我不知道我按照「散裝」的意思。我假設你的意思是更新每個表中的多個條目。在這種情況下,你需要一個條件返回多個條目進行更新。假設id是你的PK,它只會返回一個條目。

您的WHERE子句看起來與您在JOIN上使用的東西非常相似。也許你應該嘗試加入你的表格,然後更新它們。檢查了這一點:

https://stackoverflow.com/a/1293347/4024150


UPDATE a JOIN b ON a.id = b.id 
SET a.address = '$address', b.address = '$address 
WHERE (some clause that will return all the entries you want) 

我就簡化爲兩個表進行演示,但基本上您的加入將爲您呈現一個大表加入了對id字段。然後可以使用WHERE子句來標識要在整個連接表中更新的字段。

您在上面說過您找到了批量更新單個表的解決方案。該解決方案與JOIN結合應該能夠產生理想的結果。

+0

如果我完全錯過了你想問的問題,那麼也許提供一些樣本數據會有所幫助。 – Aidan

+0

是的我的意思是每個表中有多個條目。 –

+0

儘管如此,從共享的鏈接,沒有得到MySQL的任何解決方案。 如何使用不同的條件ID來更新多行? –

0

你可以做到這一點使用交易

BEGIN TRANSACTION; 

UPDATE Table1 
SET Table1.field1 = 'new value1' 
WHERE condition1 

UPDATE Table2 
SET Table2.field3 = 'new value2' 
WHERE condition2 

COMMIT; 

注:所有查詢要在批量執行,應在BEGINCOMMIT

+0

仍然是多個查詢。我在尋找,單個查詢是否可能。 –