我想要做這樣的查詢:如何更新連接和分組?
UPDATE State
LEFT JOIN Actions ON Actions.id = State.id
SET duration = FLOOR(AVG(duration)) WHERE type = 'started' GROUP BY Actions.id
我將如何做到這一點? (它說,該組織將是一個錯誤)
我想要做這樣的查詢:如何更新連接和分組?
UPDATE State
LEFT JOIN Actions ON Actions.id = State.id
SET duration = FLOOR(AVG(duration)) WHERE type = 'started' GROUP BY Actions.id
我將如何做到這一點? (它說,該組織將是一個錯誤)
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
簡短的回答是:
更新狀態LEFT JOIN操作在Actions.id = State.id SET持續時間= FLOOR(AVG(持續時間))其中Actions.id IN(從動作中選擇id,其中Actions.id = state.id和type ='started'GROUP BY Actions.id)
可能在語法上不完全正確。
這是不正確的。它會將所有這些數據平均。 –
這幾乎是答案。你能否更新內部查詢以使'WHERE type - 'started''和外部查詢成爲'WHERE State.id = tmp.id'?我會將這些更改標記爲答案 –
我改變了它。外部查詢不需要'where'子句,因爲當您使用'INNER JOIN'而不是'LEFT JOIN'時,JOIN已經過濾了'ON'子句中的數據。 –
外部查詢確實需要它。當我沒有運行時,我得到一個錯誤,它試圖設置一個空值。但是在那個外面的地方,一切正常 –