トリガーを使用してテーブルの列を計算したいのですが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 INSERT
BEFORE UPDATE
BEFORE INSERT