2016-07-29 4 views
0

は、私はこのようなクエリをしたい:結合とグループを使用して更新するにはどうすればよいですか?

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

は、私はこれをどのように行うのでしょうか?

UPDATEステートLEFTはActions.id = State.id SET時間= FLOOR(AVG(期間))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

私はそれを変更しました。外部クエリは、 'LEFT JOIN'の代わりに' INNER JOIN'を使用するときにJOINがすでに 'ON'節のデータをフィルタリングしているので、' where'節は必要ありません。 –

+0

外部クエリはそれを必要とします。私がそれなしで走ったとき、私はそれがヌル値を設定しようとしているというエラーを得る。しかし、その外側では、すべてが正しく動作します –

0

短い答えがある(これは誤差があることによって、グループは述べています) IN(アクションからIDを選択し、Actions.id = state.idおよびtype = 'started'をGROUP BY Actions.id)

おそらく構文的には正しくないと思われます。

+0

これは正しくありません。それらのすべてを一緒に平均します。 –

関連する問題