我讀過一個JOIN語句可以連接兩個表進行更新,並且我很難整理我的大腦。如何使用MYSQL服務器中的單個JOIN語句更新兩個表?
我有7個表,並且所有不同的語言都有不同的字符集。 我需要更新和插入3列..
須藤命名
- table1EN
- table1DE
- table1ZH
- table1PT
- table1FR
- table1ES
- table1RU
的表是100%相同的結構..
做一個更新,現在我用這個查詢
UPDATE `Table1EN` SET `Details`= 'String Value', `Name` = 'String Name',
`Info`= 1 WHERE `ID` = 1;
,然後重複5000次,改變table1EN到Table 1 **,並重新運行
有沒有辦法簡化這個?
UPDATE `Table1EN`,`Table1ZH`,`Table1DE`,`Table1FR`,`Table1RU`,`Table1ES`,`Table1PT`
SET `Details`= 'String Value', `Name` = 'String Name', `Info`= 1 WHERE `ID` = 1;
運行此查詢將返回模糊的名稱詳細信息,名稱和信息。 使用加入聲明似乎鎖定了服務器..
我的問題是我如何運行多表更新查詢,其中所有值都是相同的沒有更改?不鎖定服務器?沒有模糊的名稱錯誤?最後,在重命名錶後,不必在5000的卡盤中運行查詢?
UPDATE1:
正如阿瑟所指出的下方,我不包括實際這裏連接查詢。
UPDATE table1EN
INNER JOIN table1ZH USING (ID)
INNER JOIN table1DE USING (ID)
INNER JOIN table1FR USING (ID)
INNER JOIN table1PT USING (ID)
INNER JOIN table1ES USING (ID)
INNER JOIN table1RU USING (ID)
SET table1EN.Info = 1, table1EN.Details ='String Value',
table1ZH.Info = 1, table1ZH.Details ='String Value',
table1DE.Info = 1, table1DE.Details ='String Value',
table1FR.Info = 1, table1FR.Details ='String Value',
table1ES.Info = 1, table1ES.Details ='String Value',
table1RU.Info = 1, table1RU.Details ='String Value',
table1PT.Info = 1, table1PT.Details ='String Value'
WHERE table1EN.ID = 1;
我現在張貼,希望簡化它崩潰隨時我嘗試在同一時間有5000個不同的查詢的運行它停止服務器。
我試圖減少這種基於什麼我讀
到
set table1EN.Info = 1, table1EN.Details ='String Value',
table1ZH.Info=table1EN.Info,
table1DE.Info=table1EN.Info,
table1FR.Info=table1EN.Info
etc ........
然而,這似乎導致更多的服務器滯後和崩潰女巫我希望..
http://stackoverflow.com/questions/2044467/how-to-update-two-tables-in-one-statement-in-sql-server-2005或http://stackoverflow.com/questions/4361774/mysql-update-multiple-tables-with-one-query for mysql or ... http://stackoverflow.com/questions/8851974/updating-multiple-tables-in-a-single-sql-statement using inner join句法。或通過工會更新所有視圖... https://dev.mysql.com/worklog/task/?id=3701 – xQbert
拳頭鏈接統計SQL不能做到這一點,第二個是MySQL和更接近,但劑量不是解釋如何在那裏使用單個名稱,例如我將不得不在查詢中重複每個表的詳細信息名稱和信息的值。 – CKY
最後一個說明使用union ALL語句創建視圖並通過視圖進行更新。 – xQbert