1

作業しようとしている更新クエリで厄介な問題が発生しました... 次のステートメントは、channels.media_view_count をサブクエリの結果に更新する必要があります (すべてのチャネル)。

UPDATE channels c
SET c.media_view_count = (
    SELECT SUM(t.view_count)
    FROM (
      SELECT DISTINCT m.viewkey, m.view_count
      FROM media m
      INNER JOIN participants p ON m.id = p.medium_id
      WHERE p.user_id = c.id AND m.is_viewable = 1
            AND (p.pending = 0)
      ) AS t
  );

サブクエリは独立して正常に動作します (c.id に 47778 などの実際の ID を指定する場合) が、このステートメントを実行すると、次のようになります。

ERROR 1054 (42S22): Unknown column 'c.id' in 'where clause'

サブクエリ内からチャネル テーブル (c としてエイリアス化) にアクセスできると思いましたか? 私は何かを見逃していますか、それともここで完全に間違っていますか?

ありとあらゆる助けをいただければ幸いです:)

ありがとう、

  • ジェフ
4

1 に答える 1

8
UPDATE channels c, (
    SELECT t.user_id, SUM(t.view_count) cnt
    FROM (
      SELECT DISTINCT p.user_id, m.viewkey, m.view_count
      FROM media m
      INNER JOIN participants p ON m.id = p.medium_id
      WHERE m.is_viewable = 1
            AND (p.pending = 0)
      ) AS t GROUP BY t.user_id ) temp
SET c.media_view_count = temp.cnt
WHERE c.id =  temp.user_id

このようにしてみてください...ただし、テストしませんでした:) ..
概念的には、動作するはずです

于 2013-08-09T18:46:27.643 に答える