0

テーブルから別のテーブルに複数の行を挿入したい、行を取得したいテーブル、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 ;
4

1 に答える 1

3

私があなたを正しく理解していれば、あなたはすでに variable に値を持っていますid。だから変えるだけ

SELECT codeArt, qte FROM LigneBonEntrée

SELECT codeArt, qte, id FROM LigneBonEntrée
                     ^^

テーブルLigneBonEntréeに列があるid場合は、割り当てる変数の名前を変更するLAST_INSERT_ID()か、テーブルのエイリアスを使用します。

于 2013-06-12T09:36:09.200 に答える