2

mysqlコマンドプロンプトで、次のコマンドを実行します。

SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like '%Nadiya%')

戻り値

EXISTS (SELECT 1 FROM test1 WHERE name1 like '%Nadiya%')
1

ただし、次の手順はExistsとして出力されません。IFステートメントの中に入る必要があります。IF内でどのような変更が行われる可能性があるかを教えてください。

DELIMITER //
CREATE PROCEDURE verifyAndUpdate30(in searchName  varchar(12), in searchId   bigint, inout result int)
BEGIN
    IF ( SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like '%searchName%') ) THEN 
        SELECT 'EXISTS';
        UPDATE TEST SET testFlag=1 WHERE id=searchId;
        SET result=1;
    ELSE
        SELECT 'DOES NOT EXISTS';
    END IF; 

    SELECT result;
END 
//
DELIMITER ;

手順の呼び出し:

SET @increment = 0;
call verifyAndUpdate30('Nadiya', 5532, @increment);
4

2 に答える 2

3

LIKE次を使用して、文字列を難しい方法で作成する必要がありますCONCAT('%', searchName, '%')

,,,
IF ( SELECT EXISTS (
    SELECT 1
    FROM test1
    WHERE name1 like CONCAT('%', searchName, '%')   -- Build %searchName% from parts
 ) ) THEN 
,,,
于 2012-12-23T18:38:33.303 に答える
3

連結する必要があります。

ハードコードされた文字列と見なすことができるためsearchName、クエリを次のように置き換えます。

CONCAT('%', searchName, '%')

完全なコード

DELIMITER //
CREATE PROCEDURE verifyAndUpdate30(in searchName  varchar(12), in searchId   bigint, inout result int)
BEGIN
    IF ( SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like CONCAT('%', searchName, '%')) ) THEN 
        SELECT 'EXISTS';
        UPDATE TEST SET testFlag=1 WHERE id=searchId;
        SET result=1;
    ELSE
        SELECT 'DOES NOT EXISTS';
    END IF; 

    SELECT result;
END 
//
DELIMITER ;

CONCATMySQLで詳細を参照してください。

于 2012-12-23T18:40:09.247 に答える