2013-02-04 64 views
0

比方說,我有table1Mysql更新與JOIN?

ID1 | COUNT 
----------- 
    1 | 0 
    2 | 0 

table2

ID2 | COUNT|ID1 
----------------- 
    1 | 1 | 1 
    2 | 2 | 2 
    3 | 3 | 1 

我的目標是獲得來自table2通過ID1s分組計數table1總和,一個update後的結果將是:

ID1 | COUNT 
----------- 
    1 | 4 
    2 | 2 

讓我困惑的是

SELECT * 
FROM table2 t2 left outer join table1 t1 on t1.id1=t2.id1; 

返回3行,但

UPDATE table2 t2 left outer join table1 t1 on t1.id1=t2.id1 
SET t1.count=t1.count+t2.count; 

更新僅2行,併產生

ID1 | COUNT 
----------- 
    1 | 1 
    2 | 2 

有沒有人有什麼樣的正確update聲明將想法? P.S.我知道我可以用SUM做點什麼,但在我的情況下,table1table2有更多的記錄,所以總和效率會很低。

+0

你是否想得到你所提到的結果?或者你想更新? –

+0

我想更新,將離開table2在我提到的狀態。 –

回答

0

你可以使用子查詢

UPDATE table1 t1 SET `t1.COUNT`=(SELECT SUM(`t2.COUNT`) 
    FROM table2 t2 WHERE t1.ID1=t2.ID1) 

這將更新整個表做到這一點。

如果你想限制它到特定的ID然後只是指定它們。地址:

WHERE t1.ID1=<some id> 
+0

在我的情況下,我讓我們說1M表中的記錄和100表中的100條記錄,因此您建議的更新類型將不受歡迎 –

+0

向查詢添加一個WHERE子句。我添加了一個例子。如果你有多個ID,你可以使用'IN()' – Cfreak

+0

我知道這可以工作,但在我的情況下這將非常慢。我剛纔提到我不想使用sum,但我顯然需要再次確認一下:table1是〜5M行,table2是〜200K行,join表達式是〜10個字段。所以即使在哪裏也不可能慢。 –