簡単な質問のように感じますが、正しく理解できないようです。通常の IF ... THEN ... ロジックを実行しようとしていますが、うまくいかないようです:
set @var:=2;
if @var=1 THEN select 'hello';
私は得る:
エラー 1064 (42000):
SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
私は何が欠けていますか?
簡単な質問のように感じますが、正しく理解できないようです。通常の IF ... THEN ... ロジックを実行しようとしていますが、うまくいかないようです:
set @var:=2;
if @var=1 THEN select 'hello';
私は得る:
エラー 1064 (42000):
SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
私は何が欠けていますか?
代わりにCASEを使用できます。
SET @var:=2;
SELECT CASE WHEN @var=1 THEN 'hello' ELSE 'no hello' END;
--prints 'no hello'
SET @var:=2;
SELECT CASE WHEN @var:=1 THEN 'hello' ELSE 'no hello' END;
--prints 'hello'
上記の例でアイデアが明確になることを願っています。
編集:select
OPの追加の懸念に対処するには、ステートメントにs を組み込むことができcase
ますが、括弧で囲む必要があります。たとえば。
SET @var:=2;
SELECT CASE WHEN @var:=1 THEN (select 'hello') ELSE (select 'no hello') END;
注意すべきことの 1 つは、(1 つの行と 1 つの列から) 1 つの値のみを返す必要があることです。
次のように、関数、プロシージャ、およびトリガー内でのみ可能です。
DELIMITER //
DROP PROCEDURE IF EXISTS anyname//
CREATE PROCEDURE anyname()
BEGIN
IF @var1 = 1 THEN
SELECT 'hello';
END IF;
END//
SET @var1 := 1;
CALL anyname()//