2016-08-28 17 views
0

MySQLでIF文をテストするにはどうすればよいですか?クエリがIFステートメントに含まれていて何も返されなかった場合、何が起こるのですか?(0行が選択されています)MySQLでIF文をテストするにはどうしたらいいですか?

つまり、no行が選択されているときに、SELECTというクエリが返すクエリは何ですか?それはNULLを返しますか?はいの場合、これはエラーを投げるでしょうか? IF (NULL) THEN ...?またはこの場合、IFの文は実行されません。

IF (SELECT banned FROM users WHERE id=new.user_id) THEN 
// do stuff 

注:banned列が0または1のいずれかが含まれ


は現実には、私はこのようなコードを持っています。

私が知りたいのは、クエリが行を返さないときに自分のコードが安全であることですか?私はそれがエラーを投げるか何も起こらないことを意味する(ちょうどそのIFステートメントは実行されません)


は、私はmyselftそれをテストしたいことを記述、私は、私は、MySQLでIFステートメントをテストすることができますかわかりません。たとえば、私はこのコードでテストしたい:

BEGIN 
    IF (SELECT banned FROM users WHERE id=new.user_id) THEN 
     SELECT 'test'; 
    ENDIF; 
END 

しかし、上記のコードは実行されません。だから私はこの質問をしました。

+1

SQLにIF文が含まれていません。ストアドプロシージャを書くことはできますが、MySQL固有のもので、他のリレーショナルデータベースでは実行されません。 – duffymo

+0

@duffymoありがとうございました..あなたの言ったことは、私のコードがうまくいかない理由を説明しています。サブクエリが何も返さず、IF文に入るときに何が起こるか教えてください。それはエラーを投げるか、単に 'ELSE'ブロックを実行するでしょうか? – stack

答えて

2

IFステートメントは、MySQLストアドプログラム(プロシージャ、関数、またはトリガ)のコンテキストでテストできます。MySQLは無名ブロックをサポートしていません。 IFステートメントをテストするには

、私はクエリがIF文の中にあり、それは(0行が選択された)何も返さないときに何が起こるか、知っておく必要があり

DELIMITER $$ 

CREATE PROCEDURE foo 
BEGIN 
    IF (some_condition) THEN 
    SELECT 'evaluation of some_condition returned TRUE' AS msg; 
    ELSE 
    SELECT 'evaluation of some_condition did NOT return TRUE' AS msg; 
    END IF; 
END$$  

DELIMITER ; 

CALL foo; 
+0

ありがとう.. upvote ..しかし、私の主な質問は、サブクエリが何も返されず、IF文に入ったときにどうなるでしょうか?それはエラーを投げるか、単に 'ELSE'ブロックを実行するでしょうか? – stack

+0

私の誤解。私はあなたがIF文をテストする方法を尋ねていると思っていました。 – spencer7593

+0

私は自分でテストします。ちょうど他の何か、プロシージャは一時的か義務的ですか?つまり、 'CREATE PROCEDURE foo'を書くと、手続きは永遠に作成されますか?そして、私が望むたびに 'foo'を使うことができますか? – stack

1

プロシージャを作成することができますか?

あなたがここで実際に求めているのは、スカラーサブクエリです。

スカラーサブクエリは、正確に1つのカラムと、正確に1つまたはゼロのローを返します。戻り値NULLと一致するゼロ行は等価で、どちらもエラーをスローしません。いずれの場合も、サブクエリの戻り値はNULLです。

あなたはあなたがそのようなあなたがサブクエリでWHEREを忘れたときのように(1行以上を返すスカラ副問合せを書くために管理する場合は、しかし、エラーがスローされます。しかし、ゼロ行がperfecty有効です。

技術的には任意の式を意味truthiness、そして何IS TRUEためIFテスト... 両方IS NOT FALSEIS NOT NULLこと - を満たすIF。戻り値がFALSE(0)またはNULLの場合は、ELSEブランチがある場合はそれに従います。

上記のIS NOT FALSEのような強調表示されたキーワード句は、これらがSQLの論理演算子であるという点を強調しています。 (それがないので、また1を返す)がにISNので」、SELECT NULL IS FALSE(0を返す(それがあるので、リターン1)

SELECT 0 IS FALSEようなクエリを試しまたはSELECT NULL IS NOT TRUE(リターン1、そうでないため)またはSELECT NULL IS NOT FALSE t)私が何を意味するか見る。

+0

大きな説明..ありがとう.. upvote – stack

関連する問題