Обновление таблицы пользователей из сложного SQL-запроса, users.id не распознан? - PullRequest
0 голосов
/ 06 октября 2010

Итак, на днях я задал этот вопрос о том, как объединить три сложных запроса, и нашел способ сделать это. Сейчас я пытаюсь использовать эти запросы для обновления поля в таблице пользователей и не могу найти способ заставить его работать. Вот запрос:

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'. Когда я пытаюсь удалить бит .user_id=users.id из каждого предложения where, он запустится, но в итоге получит общую сумму field_sum, а не только field_sum для этого пользователя. Есть ли способ сделать это?

1 Ответ

1 голос
/ 06 октября 2010

Использование:

    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 равно нулю.Вы хотите обновить только те, у которых есть запись хотя бы в одной из этих таблиц?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...