これはとても簡単な質問ですが、2時間どこにも答えがありません。
MYSQL IFステートメントをどのように使用しますか。何を入れても機能しません。 SQL Serverでは、これは5秒のジョブです。
プロシージャ内にある必要がありますか?
IFステートメント内でSELECTを使用できますか?
ここではIF関数にはあまり興味がありません。
助けてくれてありがとう。
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
同じクエリから別のフィールドを選択できますが、クエリは複数の値を返す可能性があるため、選択クエリの使用はサポートされない場合があります。mysqlは列の行の概念をサポートしていません。
SELECT IF(`field1`>1,`field2`,`field3`) FROM TABLE1 WHERE 1
ここに field1
、field2
、field3
は同じテーブルのフィールドです
これは役に立ちますか?
プロシージャ内にある必要がありますか?
はい、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;
あなたは 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;
( この答え による)
あなたは探している CASE WHEN
? http://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
ifを使用したMySQLのいくつかのクエリ は、おそらくここで関連するアプローチを示しています。
この質問は、「テーブルのデータを使用して、データベースの他の部分を変更する可能性のある制御フローを指示するにはどうすればよいですか」と尋ねていると想定していることに注意してください。
CASE
WHEN receiver = '$userid' THEN receiver
ELSE sender
END AS contact