我想要做这样的查询:如何更新连接和分组?
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'子句中的数据。 –
外部查询确实需要它。当我没有运行时,我得到一个错误,它试图设置一个空值。但是在那个外面的地方,一切正常 –