特定のリレーションの挿入を行うときに、トリガーを使用して他のテーブルから情報を取得し、それらを挿入するときに問題が発生します。これは基本的に、リレーションに必要な他のテーブルで情報を検索する必要がないようにするためです。問題は、クエリの結果に等しい変数を設定し、その変数の値を使用してテーブルの列の 1 つを設定する際に問題があることです。コードはそのように見えます。問題は、変数が設定されず、常にnullになることですが、コマンドラインからクエリを実行して結果を取得できるため、問題が何であるかがよくわかりません誰かが私が間違っていることを指摘してください.
関係 sales_cost にはモデル (主キー) VARCHAR(45) と価格 FLOAT の 2 つのメンバーがあることに注意してください。
DELIMITER $$
USE `mydb`$$
CREATE
DEFINER=`local`@`localhost`
TRIGGER `mydb`.`sales_contract_before`
BEFORE INSERT ON `mydb`.`sales_contract`
FOR EACH ROW
BEGIN
/*variables*/
declare cost float;
/*
SELECT car.model INTO model FROM car where car.id = NEW.car_id;
set NEW.model = model;*/
set cost = (select price from sales_cost where model = NEW.model); //cost never gets set its always null
set new.price = cost;
END$$
更新:問題が何であるかを理解したようですが、それでも何らかの洞察が必要です(これを達成する方法について誰かがそれを持っている場合)問題は、設定されたクエリでWHEREを使用する場合、何らかの理由でWHERE修飾子を使用することにあります私が選択しているテーブルに関係なく、返されません(またはNULLが返されます)。私がしたことは、モデル名を受け取り、同じクエリを実行してコストを返す関数を作成することでした。しかし、誰かがクエリの結果と等しい変数を設定する方法の例を示すことができれば、それが機能する場所で本当に感謝しています。私はそれが私の側の構文エラーであるに違いないと思いますが、問題について推測するのにトリガーについて十分に知りません