0

トリガーを使用してテーブルの列を計算したいのですがNULL、の結果しか得られませんpoints
値を取得するために 2 つのクエリを実行しないように、2 つのローカル変数を宣言しました。
トリガー内の SELECT...INTO が正しく機能していないようです。
select ステートメント (INTO ... なし) は有効で、単一の行のみを返します。

助けてください、今まで理解できませんでした...

DELIMITER //
CREATE TRIGGER calculate_points BEFORE INSERT ON stats
FOR EACH ROW
BEGIN
  DECLARE pwin INT;
  DECLARE pdefeat INT;

  SELECT div.p_win, div.p_defeat
  INTO pwin, pdefeat
  FROM stats
  LEFT OUTER JOIN team ON stats.team_id = team.id
  LEFT OUTER JOIN div ON team.div_id = div.id;

  SET new.points = new.wins * pwin - new.defeats * pdefeat;
END//


編集#1:いくつかのサンプルデータ...

stats:
+----+---------+------+---------+--------+
| id | team_id | wins | defeats | points |
+----+---------+------+---------+--------+
|  1 |       1 |    3 |       1 |        |
+----+---------+------+---------+--------+

team:
+----+-------+--------+
| id | name  | div_id |
+----+-------+--------+
|  1 |  abc  |    1   |
+----+-------+--------+

div:
+----+-------+-------+----------+
| id | name  | p_win | p_defeat |
+----+-------+-------+----------+
|  1 |  abc  |     3 |        0 |
+----+-------+-------+----------+


編集#2:更新操作(に変更)に対して
同じトリガーをテストしましたが、これは機能しています。 私はまだ疑問に思っています、何が問題なのですか?! 編集#3: 言及する必要がありました:統計テーブルに複数のエントリがある場合、この選択クエリは単一の行を返さないことを知っています。空のテーブルから始めて、この 1 行 (サンプル) を統計に挿入し、ポイント = NULL を取得します。BEFORE INSERTBEFORE UPDATE
BEFORE INSERT



4

0 に答える 0