テーブルから別のテーブルに複数の行を挿入したい、行を取得したいテーブル、2 つの列のみが必要ですが、ディスティネーション テーブルには 3 つの列があるため、ソース テーブルの最初の 2 つの列が影響を受けます。 distination テーブルの 2 つの列、および distination テーブルの 3 番目の列は値の影響を受けます。
ソーステーブルから選択したい値は次のとおりです。
SELECT codeArt, qte FROM LigneBonEntrée
WHERE numBon = NEW.num
そして宛先フォルダーには、次のように挿入されています:
INSERT INTO LigneInterventaire(codeArt, qteInv, numInv)
VALUES (NEW.codeArt, NEW.qte, LAST_INSERT_ID());
私がこれを試した場合:
INSERT INTO LigneInterventaire(codeArt, qteInv, numInv)
SELECT codeArt, qte FROM LigneBonEntrée
WHERE numBon = NEW.num
値を挿入する必要がありますLAST_INSERT_ID()
どうやってやるの ?
編集:
私が実際にやろうとしているのは、このトリガーが起動されたときにテーブルにトリガーがあり、Inventaire という別のテーブルに現在の日付を挿入したいということです。もちろん、挿入された主キーは の値になりますLAST_INSERT_ID()
。次に、これLAST_INSERT_ID()
を次のクエリに使用します。
INSERT INTO LigneInterventaire(codeArt, qteInv, numInv)
SELECT codeArt, qte FROM LigneBonEntrée
WHERE numBon = NEW.num;
の値はLAST_INSERT_ID()
列に影響しますnumInv
。
そして、これは私が使用しているトリガーです:
DELIMITER //
CREATE TRIGGER `accepterLivraion` BEFORE UPDATE ON `BonEntrée`
FOR EACH ROW
BEGIN
DECLARE id INTEGER;
IF NEW.etat = 'Accepté' THEN
IF verifierLivraison(OLD.num) = FALSE THEN
SIGNAL sqlstate '45001' set message_text = "La livraison n'a pas respectée les termes de la commande de sortie.";
ELSE
INSERT INTO Inventaire(`date`) VALUES (DATE(NOW());
SET id = LAST_INSERT_ID();
INSERT INTO LigneInterventaire(codeArt, qteInv, numInv)
SELECT codeArt, qte FROM LigneBonEntrée
WHERE numBon = NEW.num;
END IF;
END IF;
END//
DELIMITER ;