2016-07-29 48 views
0

我想要做這樣的查詢:如何更新連接和分組?

UPDATE State 
LEFT JOIN Actions ON Actions.id = State.id 
SET duration = FLOOR(AVG(duration)) WHERE type = 'started' GROUP BY Actions.id 

我將如何做到這一點? (它說,該組織將是一個錯誤)

回答

2
UPDATE State 
INNER JOIN 
(
    select id, FLOOR(AVG(duration)) as avg 
    from Actions 
    WHERE type = 'started' 
    group by id   
) tmp ON tmp.id = State.id 
SET duration = tmp.avg 
+0

這幾乎是答案。你能否更新內部查詢以使'WHERE type - 'started''和外部查詢成爲'WHERE State.id = tmp.id'?我會將這些更改標記爲答案 –

+0

我改變了它。外部查詢不需要'where'子句,因爲當您使用'INNER JOIN'而不是'LEFT JOIN'時,JOIN已經過濾了'ON'子句中的數據。 –

+0

外部查詢確實需要它。當我沒有運行時,我得到一個錯誤,它試圖設置一個空值。但是在那個外面的地方,一切正常 –

0

簡短的回答是:

更新狀態LEFT JOIN操作在Actions.id = State.id SET持續時間= FLOOR(AVG(持續時間))其中Actions.id IN(從動作中選擇id,其中Actions.id = state.id和type ='started'GROUP BY Actions.id)

可能在語法上不完全正確。

+0

這是不正確的。它會將所有這些數據平均。 –