2012-03-06 38 views
0

這應該是一個簡單的問題,但我似乎無法找到一個確切的解決方案。這基本上就是我:將兩個MySQL表合併成一個(加算術)

TABLE_1:

id* scenario* val1  val2 
--- --------  ----- ------ 
AC1 1   2  0 
AC2 1   1  0 
AC1 2   4  0 
AC2 2   3  0 

TABLE_2:

id*  val3 
---  ------ 
AC1  4 
AC2  6 

所有我想要做的就是TABLE_1的更新VAL2其中場景= 1與ID匹配來自TABLE_2值但我希望它等於val1 + val3(我不知道如何使它更少混淆)。因此,對於這個例子,我想TABLE_1成爲:

id* scenario* val1  val2 
--- --------  ------ -------- 
AC1 1   2  6 
AC2 1   1  7 
AC1 2   4  0 
AC2 2   3  0 

我認爲這是可以用一個簡單的MySQL的語句來完成,但我不知道如何與一個條件構造它的第一個表(「INSERT INTO TABLE_1 WHERE scenario = 1 SELECT ...「??)以及兩個不同表格的兩列的算術運算。

回答

1

試試這個:

UPDATE table_1 
SET val2 = val1 + 
    (SELECT val3 FROM table_2 
    WHERE id = table_1.id 
    LIMIT 0,1) 
WHERE scenario = 1 
+0

謝謝Marco!工作完美,易於遵循。 – 2012-03-06 18:03:10

+0

@John史密斯:很高興幫助你:) – Marco 2012-03-06 18:11:11

0

試試這個:

UPDATE table_1 a join table_2 b on a.id = b.id 
set a.val2 = a.val1 + b.val3 
where a.scenario = 1 
+0

我認爲它不起作用:你嘗試過嗎? – Marco 2012-03-06 17:54:46

+0

thnx指出,我在SQL服務器上測試它,並沒有注意到這個問題是爲MySQL。 – 2012-03-06 17:58:39

0

嘗試此查詢 -

UPDATE table_1 t1 
    JOIN table_2 t2 
    ON t1.id = t2.id 
    SET t1.val2 = t1.val1 + t2.val3 
WHERE t1.scenario = 1 
1

我假設,因爲否則就沒有,你會硬編碼方案值將table_2數據鏈接到table_1 scenairo的方法。

所以我會做這樣的事情:

UPDATE table_1 set val2 = val1 + (select val3 from FROM table_2 WHERE table_2.id = table_1.id) 
WHERE scenario = 1 
2

一個漂亮的直線前進性和可讀性JOIN將做到這一點;

UPDATE table_1 t1 
JOIN table_2 t2 ON t1.id = t2.id 
SET t1.val2 = t1.val1 + t2.val3 
WHERE scenario = 1; 

演示here

+0

感謝您的快速回復! SQL Fiddle看起來像是一個非常有用的工具,可以幫助我理解邏輯。 – 2012-03-06 18:05:56