6

外部キーでもある3つの汎用キーを持つテーブルがあります。これは私の質問です -

        IF (EXISTS(SELECT * FROM table1 WHERE col_1 =4))
        BEGIN 
        UPDATE table1 
    SET col_2 = 3,
    col_3 = 100
        WHERE col_1 = 4 
        END
        ELSE 
        BEGIN
        INSERT INTO table1 
    (col_1, col_2, col_3) 
        VALUES(4, 2, 27)
        END

これにより、構文エラーが発生します。エンジンはInnoDBを使用。照合: utf8_swedish_ci

私もこれを試しました -

              INSERT INTO table1
    (col1, col2, col3)
     VALUES
    (:val1, :val2, :val3)
    ON DUPLICATE KEY UPDATE
    col2=:val2,
    col3=:val3

これは正しく機能せず、重複キーがあるにもかかわらず行を挿入するだけです。

4

5 に答える 5

0

これを試して:

IF EXISTS (SELECT 1 FROM table1 WHERE col_1 = '4') THEN 
BEGIN 
    UPDATE assignment_question 
    SET col_2 = '3', col_3 = '100' 
    WHERE col_1 = '4';
END
ELSE 
BEGIN
    INSERT INTO table1 (col_1, col_2, col_3) 
    VALUES (4, 2, 27);
END
于 2014-01-09T11:03:05.447 に答える
0

if exists の代わりに、以下のコードを試すことができます

SELECT COUNT(*) INTO COUNT FROM TABLE1 WHERE COL_1 = '4'
IF (COUNT > 0) THEN
BEGIN 
 UPDATE TABLE1 SET COL_2 = '3', COL_3 = '100' WHERE COL_1 = '4';
END
ELSE
BEGIN
 INSERT INTO TABLE1 (COL_1, COL_2, COL_3) VALUES (4, 2, 27);
END

お役に立てれば。

于 2014-04-25T03:18:15.663 に答える
0
DELIMITER //
CREATE PROCEDURE p()                                                                                                                                                                     
BEGIN
    IF EXISTS(SELECT * FROM table1 WHERE col_1 = 4) THEN
        UPDATE table1 SET col_2 = 3, col_3 = 100 WHERE col_1 = 4;
    ELSE
        INSERT INTO table1 VALUES(4, 2, 27);
    END IF;
END//
DELIMITER ;

問題:

  1. END IFすべてのIFステートメントに対して存在する必要があります。
  2. ドキュメントmysqlに従って手順を作成しました:

mysqlクライアント プログラムを使用して、セミコロン文字を含むストアド プログラムを定義すると、問題が発生します。デフォルトでは、mysql自体がセミコロンをステートメント区切り文字として認識するため、一時的に区切り文字を再定義して、mysql がストアド プログラム定義全体をサーバーに渡すようにする必要があります。

于 2017-07-25T16:38:23.920 に答える