Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中使用IF(不是函数)_Mysql_Conditional - Fatal编程技术网

在MySQL中使用IF(不是函数)

在MySQL中使用IF(不是函数),mysql,conditional,Mysql,Conditional,我有一个感觉很简单的问题,但似乎无法正确回答。我只是想执行一个常规的如果。。。然后。。。逻辑,但似乎无法正确理解: set @var:=2; if @var=1 THEN select 'hello'; 我得到: 错误1064(42000): 您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near'if@var=1的语法,然后在第1行选择'hello' 我缺少什么?你可以用它来代替 我希望上面的例子能清楚地说明这一点 编辑:为了解决OP的其他问题,您可以将selec

我有一个感觉很简单的问题,但似乎无法正确回答。我只是想执行一个常规的如果。。。然后。。。逻辑,但似乎无法正确理解:

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

错误1064(42000):

您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near'if@var=1的语法,然后在第1行选择'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()//

您只能在过程或函数中执行这些语句,这几乎令人难以置信。他们有任何理由来解释这样一个残酷而不寻常的要求吗?谢谢,但对于稍微复杂一点的事情,例如:if@var=1 select*from tableX else select*frm,这是行不通的tableY@MorDeror像什么?我肯定有办法out@MorDeror它也有效。请参阅我的编辑。如果你告诉我们你到底想要实现什么,那么我们可以更好地帮助hanks@nawfal,但是仅仅返回一个专栏可能无法涵盖大多数用途cases@MorDeror是的,它不会覆盖大多数情况,但是如果else逻辑是一种代码味道,那么您必须通过它检索多个列。我闻到一个设计缺陷。我要求你发布实际需求,总会有更好的替代方案。我想我们所有人都需要更多关于你目标的细节,然后才能提供合格的答案。什么细节?我开始认为我是唯一一个在批处理模式中使用条件语句的人:)如果您需要任何其他信息,请询问。下面是我发现的一个解决方法示例。虽然我想避免它,如果我可以的话:那么你不能把你的脚本放在一个过程中?在这种情况下不是。我只想用维德的变通办法。谢谢
DELIMITER //
DROP PROCEDURE IF EXISTS anyname//
CREATE PROCEDURE anyname()
BEGIN
    IF @var1 = 1 THEN
        SELECT 'hello';
    END IF;
END//
SET @var1 := 1;
CALL anyname()//