我有一个感觉很简单的问题,但似乎无法正确回答。我只是想执行一个常规的 IF ... THEN ... 逻辑,但似乎无法正确:
set @var:=2;
if @var=1 THEN select 'hello';
我得到:
错误 1064 (42000):
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'if @var=1 THEN select 'hello'' 附近使用正确的语法
我错过了什么?
我有一个感觉很简单的问题,但似乎无法正确回答。我只是想执行一个常规的 IF ... THEN ... 逻辑,但似乎无法正确:
set @var:=2;
if @var=1 THEN select 'hello';
我得到:
错误 1064 (42000):
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'if @var=1 THEN select 'hello'' 附近使用正确的语法
我错过了什么?
您可以改用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 的其他问题,您可以将select
s 合并到case
语句中,但您应该用括号括起来。例如。
SET @var:=2;
SELECT CASE WHEN @var:=1 THEN (select 'hello') ELSE (select 'no hello') END;
需要注意的一件事是它应该只返回一个值(来自一行和一列)
您可以,但只能在函数、过程和触发器内部,如下所示:
DELIMITER //
DROP PROCEDURE IF EXISTS anyname//
CREATE PROCEDURE anyname()
BEGIN
IF @var1 = 1 THEN
SELECT 'hello';
END IF;
END//
SET @var1 := 1;
CALL anyname()//