0

そこで先日、 3 つの複雑なクエリを組み合わせる方法についてこの質問をし、それを行う方法を見つけました。現在、これらのクエリを使用して users テーブルのフィールドを更新しようとしていますが、それを機能させる方法が見つかりません。クエリは次のとおりです。

update users set field_sum =(
    select sum(field_sum) from (
        select sum(field_one) as field_sum
          from t_a join t_b on (t_a.bid = t_b.id) where t_b.user_id=users.id 
        union all
        select sum(field_two) as field_sum
          from t_c join t_d on (t_c.did = t_d.id) where t_d.user_id=users.id 
        union all
        select sum(field_three) as field_sum
          from t_e where t_e.user_id=users.id
    ) as field_sumT
)

実行しようとすると、次のエラーが表示されます: ERROR 1054 (42S22): Unknown column 'users.id' in 'where clause'. 各where句からビットを削除しようとする.user_id=users.idと、実行されますが、そのユーザーのfield_sumだけでなく、field_sumの合計になります。これを達成する方法はありますか?

4

1 に答える 1

1

使用する:

    UPDATE USERS u
LEFT JOIN (SELECT t_b.user_id,
                  SUM(field_one) as field_sum 
             FROM t_a 
             JOIN t_b on t_a.bid = t_b.id
         GROUP BY t_b.user_id) a ON a.user_id = u.id
LEFT JOIN (SELECT t_d.user_id,
                  SUM(field_two) as field_sum 
             FROM t_c 
             JOIN t_d on t_c.did = t_d.id
         GROUP BY t_d.user_id) b ON b.user_id = u.id
LEFT JOIN (SELECT t_e.user_id,
                  SUM(field_three) as field_sum 
             from t_e 
         GROUP BY t_e.user_id) c ON c.user_id = u.id
      SET field_num = COALESCE(a.field_sum, 0) + COALESCE(b.field_sum, 0) + COALESCE(c.field_sum, 0)

警告

これにより、サポート行にレコードがないユーザーは、field_sum値がゼロに設定されます。それらのテーブルの少なくとも1つにレコードがあるものだけを更新しますか?

于 2010-10-06T03:57:42.330 に答える