sql >> データベース >  >> RDS >> Mysql

条件付きmySQLステートメント。真の場合はUPDATE、偽の場合はINSERT

    更新: IF EXISTSを使用する必要があることに注意してください IS NULLの代わりに 元の回答に示されているように。

    すべてのロジックをカプセル化し、フレーバーが存在するかどうかを確認するためのストアドプロシージャを作成するコード:

    DELIMITER //
    
    DROP PROCEDURE `GetFlavour`//
    CREATE PROCEDURE `GetFlavour`(`FlavourID` INT, `FlavourName` VARCHAR(20))
    BEGIN
    IF EXISTS (SELECT * FROM Flavours WHERE ID = FlavourID) THEN
    UPDATE Flavours SET ID = FlavourID;
    ELSE
    INSERT INTO Flavours (ID, Name) VALUES (FlavourID, FlavourName);
    END IF;
    END //
    
    DELIMITER ;
    

    オリジナル:

    このコードを使用できます。特定のレコードの存在をチェックし、レコードセットがNULLの場合は、新しいレコードを調べて挿入します。

    IF (SELECT * FROM `TableName` WHERE `ID` = 2342 AND `Name` = 'abc') IS NULL THEN
    INSERT INTO `TableName` (`ID`, `Name`) VALUES ('2342', 'abc');
    ELSE UPDATE `TableName` SET `Name` = 'xyz' WHERE `ID` = '2342';
    END IF;
    

    私はMySQL構文に少し錆びていますが、そのコードは、ON DUPLICATE KEYを使用するのではなく、少なくともほとんどの方法でそこに到達するはずです。



    1. クラスの本のコストに関するMySQLクエリ

    2. SQL Server v.Next:STRING_AGGパフォーマンス、パート2

    3. SQLServer2019でのデータベースリカバリの高速化

    4. oracle12c-文字が最後に出現した後の文字列を選択します