3

この特定のエラーメッセージに関するいくつかの質問を見ましたが、私の問題に一致するものは見つかりませんでした。

私の問題の簡単な説明。

いくつかのゲームの結果を含むテーブルがあります。

誰かが不在の場合、前のゲームのこの人の平均をゲーム結果として保存し、プロパティf_presentを0に設定します。

その部分については問題ありません。

古いゲームを変更すると問題が発生します。新しい値(彼がいないゲームのそのプレーヤーの新しい平均)を保存するために、誰かがいない次のすべてのゲームを更新する必要があります。

クエリは実行できますが、「FROMテーブルで更新対象のテーブルを指定できません」というエラーメッセージが表示されたため、更新できません。

これが私のクエリです(これは機能します)

   select t1.f_subgame_id,
    t1.F_PLAYER_ID, 
    (SELECT avg(t2.f_result) 
     from t_subgames_results t2 
     join t_subgames t2s on t2s.f_subgame_id = t2.f_subgame_id
     join t_seasons_games t2ss on t2ss.f_game_id = t2s.f_game_id
     where F_RESULT > -1 
       and F_PLAYER_ID = t1.F_PLAYER_ID
       and t2ss.F_SEASON_ID = t1ss.F_SEASON_ID
       and t2ss.F_DATE < t1ss.F_DATE
     )
    from t_subgames_results t1
    join t_subgames t1s on t1s.f_subgame_id = t1.f_subgame_id
    join t_seasons_games t1ss on t1ss.f_game_id = t1s.f_game_id
    where t1ss.f_date>'2012-09-07' and t1.F_PRESENT = 0;

これが私の更新の試みです:

   update t_subgames_results t1
   join t_subgames t1s on t1s.f_subgame_id = t1.f_subgame_id
   join t_seasons_games t1ss on t1ss.f_game_id = t1s.f_game_id
   set f_result = 
    (SELECT avg(t2.f_result) as result
     from t_subgames_results t2 
     join t_subgames t2s on t2s.f_subgame_id = t2.f_subgame_id
     join t_seasons_games t2ss on t2ss.f_game_id = t2s.f_game_id
     where F_RESULT > -1 
       and F_PLAYER_ID = t1.F_PLAYER_ID
       and t2ss.F_SEASON_ID = t1ss.F_SEASON_ID
       and t2ss.F_DATE < t1ss.F_DATE
     )
   where t1ss.f_date>'2012-09-07' and t1.F_PRESENT = 0;

繰り返しになりますが、この問題についていくつかのトピックがあることは知っていますが、私の問題に関連するトピックを見つけることができないようです...

私を助けてくれてありがとう!

4

1 に答える 1

3

どうもありがとうございました!

create temporary table t_results_temp SELECT * from t_subgames_results;

update t_subgames_results t1
join t_subgames t1s on t1s.f_subgame_id = t1.f_subgame_id
join t_seasons_games t1ss on t1ss.f_game_id = t1s.f_game_id
set f_result = 
(SELECT COALESCE(avg(t2.f_result),0) as result
 from t_results_temp t2 
 join t_subgames t2s on t2s.f_subgame_id = t2.f_subgame_id
 join t_seasons_games t2ss on t2ss.f_game_id = t2s.f_game_id
 where t2.F_RESULT > -1 
   and F_PLAYER_ID = t1.F_PLAYER_ID
   and t2ss.F_SEASON_ID = t1ss.F_SEASON_ID
   and t2ss.F_DATE < t1ss.F_DATE
 )
where t1ss.f_date>'2012-09-07' and t1.F_PRESENT = 0;

drop table t_results_temp;
于 2012-09-19T22:58:37.250 に答える