1

我有一个感觉很简单的问题,但似乎无法正确回答。我只是想执行一个常规的 IF ... THEN ... 逻辑,但似乎无法正确:

set @var:=2;
if @var=1 THEN select 'hello';

我得到:

错误 1064 (42000):

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'if @var=1 THEN select 'hello'' 附近使用正确的语法

我错过了什么?

4

2 回答 2

2

您可以改用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'

我希望通过上面的例子可以清楚地了解这个想法。

编辑:为了解决 OP 的其他问题,您可以将selects 合并到case语句中,但您应该用括号括起来。例如。

SET @var:=2; 
SELECT CASE WHEN @var:=1 THEN (select 'hello') ELSE (select 'no hello') END;

需要注意的一件事是它应该只返回一个值(来自一行和一列)

于 2012-11-12T10:29:51.627 回答
0

您可以,但只能在函数、过程和触发器内部,如下所示:

DELIMITER //
DROP PROCEDURE IF EXISTS anyname//
CREATE PROCEDURE anyname()
BEGIN
    IF @var1 = 1 THEN
        SELECT 'hello';
    END IF;
END//
SET @var1 := 1;
CALL anyname()//
于 2012-11-12T15:11:38.787 回答