2012-09-12 103 views
37

我有兩個表,基於另一個表MySQL的更新表值

這是我的第一個表,

ID  SUBST_ID  CREATED_ID 
1  031938   TEST123 
2  930111   COOL123 
3  000391   THIS109 
4  039301   BRO1011 
5  123456   COOL938 
...  ...    ... 

這是我的第二個表,

ID  SERIAL_ID  BRANCH_ID 
1  039301   NULL 
2  000391   NULL 
3  123456   NULL 
...  ...    ... 

我需要一些如何使用我的第一個表中的數據更新我的第二個表中的所有行。

它需要在一個更新查詢中完成所有操作。

SUBST_ID和SERIAL_ID都匹配,它需要從第一個表中獲取created_id並將其插入到第二個表中。

所以第二個表將成爲接下來,

ID  SERIAL_ID  BRANCH_ID 
1  039301   BRO1011 
2  000391   THIS109 
3  123456   COOL938 
...  ...    ... 

謝謝您的幫助和指導。

回答

79
UPDATE TABLE2 
     JOIN TABLE1 
     ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID; 
2

我認爲這應該工作

UPDATE secondTable 
JOIN firsTable ON secondTable.SERIAL_ID = firsTable.SUBST_ID 
SET BRANCH_ID = CREATED_ID 
13

除了湯姆的答案,如果你需要重複操作頻繁,並希望節省時間,你可以這樣做:

UPDATE TABLE1 
     JOIN TABLE2 
     ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
WHERE TABLE2.BRANCH_ID IS NULL 
1
UPDATE TABLE2 
     JOIN TABLE1 
     ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
WHERE TABLE2.BRANCH_ID IS NULL or TABLE2.BRANCH_ID=''; 
+0

您能否詳細說明您的答案,並增加關於您提供的解決方案的更多描述? – abarisone

+0

通過在subset_Id和Serial_Id上使用連接,你將得到一個Result set.and結果集將包含創建的id ..現在集中在SET之後的查詢那裏我們實際分配或提供從created_Id值到Branch_Id ....希望你明白。 。:) –

0

使用INNER JOIN

UPDATE TABLE1 
INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID; 

另一種替代解決方案如下圖所示:在這裏,我使用WHERE條款,而不是JOIN

UPDATE 
    TABLE1, 
    TABLE2 
WHERE 
    TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET 
    TABLE2.BRANCH_ID = TABLE1.CREATED_ID; 
0

你可以使用這個太:

update TABLE1 set BRANCH_ID = (select BRANCH_ID from TABLE2 where TABLE1.SUBST_ID = TABLE2.SERIAL_ID) 

但我的經驗,我可以說,這種方式太慢了,不推薦!

相關問題