web-dev-qa-db-ja.com

MYSQL SELECT WITHIN IFステートメント

これはとても簡単な質問ですが、2時間どこにも答えがありません。

MYSQL IFステートメントをどのように使用しますか。何を入れても機能しません。 SQL Serverでは、これは5秒のジョブです。

プロシージャ内にある必要がありますか?

IFステートメント内でSELECTを使用できますか?

ここではIF関数にはあまり興味がありません。

助けてくれてありがとう。

22
tura

selectでのIFステートメントの使用方法

select if(status>0, 'active', 'inactive') as status from users

はい、select内でIFを使用できます

例:

select if((select count(*) from versions) > (select count(*) from groups), true, false) as value
14
Srihari Goud

同じクエリから別のフィールドを選択できますが、クエリは複数の値を返す可能性があるため、選択クエリの使用はサポートされない場合があります。mysqlは列の行の概念をサポートしていません。

SELECT IF(`field1`>1,`field2`,`field3`) FROM TABLE1 WHERE 1

ここに field1field2field3は同じテーブルのフィールドです

これは役に立ちますか?

5
Harish

プロシージャ内にある必要がありますか?

はい、ifステートメントを使用するには、手順に入る必要があります。

IFステートメント内でSELECTを使用できますか?

はい、できます:

drop procedure if exists sp;

create procedure sp () begin
    if ((select 1 /*from whatever table would work*/)=1) then
        select 'it works';
    end if;
end;

call sp;

drop procedure sp;
5
Benoit

あなたは comment でそれをほのめかしましたが、ここでの答えのどれもそれを明示的に述べていないので、私は:

MySQLでは、ストアドプロシージャの本体の外で IFステートメント を使用できません。ドキュメントは、「ストアドプログラムのIFステートメント」(私の強調)として概念を紹介するときにこれを暗示しています。

私が知る限り、コマンドラインプロンプトまたはクライアントを介して(たとえば、PHPから)発行されたステートメントの実行フローを制御する簡単な方法はありません。 (MySQLの代わりにPHPのifステートメントを使用)。私はこれについて修正したいのですが:-)


他の構成を使用して、ケースバイケースでこれをシミュレートできます。例えば:

IF x THEN 
  INSERT INTO mytable (mycol)
  VALUES ('foo')
END IF

なる可能性があります

INSERT INTO mytable (mycol)
SELECT 'foo'
FROM dual
WHERE x

この答え による)


新しいストアドプロシージャを作成、呼び出し、削除することもできます。

DELIMITER \\
CREATE PROCEDURE tmpfunc() BEGIN
  IF x THEN 
    INSERT INTO mytable (mycol)
    VALUES ('foo');
  END IF;
END \\
DELIMITER ;
CALL tmpfunc();
DROP PROCEDURE tmpfunc;

この答え による)

2
Rich

あなたは探している CASE WHENhttp://dev.mysql.com/doc/refman/5.0/en/case-statement.html

IFはすでにマニュアルにあります http://dev.mysql.com/doc/refman/5.0/en/if-statement.html

@Nanneリンクの方が関連性が高いと思います。リンクのリストに追加するだけです。 http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

2
Nishant

ifを使用したMySQLのいくつかのクエリ は、おそらくここで関連するアプローチを示しています。

この質問は、「テーブルのデータを使用して、データベースの他の部分を変更する可能性のある制御フローを指示するにはどうすればよいですか」と尋ねていると想定していることに注意してください。

0
rdm
    CASE
        WHEN receiver = '$userid' THEN receiver
        ELSE sender
    END AS contact
0
SuperSpy