查询问题中的MySQL IF语句

时间:2012-05-03 20:00:31

标签: mysql sql

我正在尝试执行以下查询。它是运行报告所需查询的起点:

SET @fname = 'Bob';
SET @blah = 0;

SELECT CASE WHEN @fname IS NULL THEN @blah = 1 ELSE @blah END;


    IF (@blah > 0) THEN
       SELECT * FROM mytable
    END IF;

我的语法显然有些问题,但我无法弄明白。我已经使用IF语句编写了其他查询而没有问题。这不会在SQLyog或Workbench中运行。它说无论有没有parens,“IF”都有一个sytax错误,无所谓。

我只需要能够在IF语句中评估变量/输入参数。

感谢任何帮助。 注意 - 如果我可以正确评估参数但我正在尝试任何可能的解决方案,则可能不需要SELECT CASE。

由于

7 个答案:

答案 0 :(得分:2)

只能在BEGIN ... END子句中使用IF-THEN构造,该子句只能用于过程,函数,触发器和事件。不可能在一个简单的脚本中使用它。

对于你的情况,我建议这个 -

SELECT * FROM mytable WHERE @blah > 0;

答案 1 :(得分:2)

  1. 需要有一个程序或某种形式的脚本需要根据案例执行。
  2. 在这种情况下,需要在报告数据源中启动
  3. CALL过程方法

    脚本可以用以下方式编写:(注意:PROCEDURE可以根据需要使用参数)

    DELIMITER ?
    CREATE PROCEDURE XYZ()
    BEGIN
    SET @fname = 'Bob';
    SET @blah = 1;
    
    SELECT CASE WHEN @fname IS NULL THEN  @blah = 0 ELSE @blah END;
    IF (@blah > 0) THEN
    SELECT * from mytable;
    END IF;
    END ?
    DELIMITER;
    

    然后,您可以根据需要将带有或不带参数的CALL XYZ()传递到您的数据源,或者将您的查询传递到哪里以生成报告。

  4. 以下在MySQL Workbench上正常工作。如果不需要,可以从上述过程中删除SELECT CASE个查询。

答案 2 :(得分:0)

我看到了else语句的问题:

SELECT CASE WHEN @fname IS NULL THEN @blah = 1 END;

答案 3 :(得分:0)

// Using procedure getting result as per requirement

drop procedure abc;
DELIMITER // 
create procedure abc() 
begin 
declare fname varchar(10);
declare blah int; 

set fname = 'Bob'; 
set blah = 0;

if(fname IS not NULL) then
       SELECT * from studmaster; 
end if; 

end //
DELIMITER ;

//--comment--> for execute procedure
call abc();

答案 4 :(得分:0)

不确定这对你有多大帮助,但你可以在sql查询中使用if语句

Select Blah.name,sum(Blah.quan) as SumofQuan,  IF(Blah.descr LIKE '%searchterm%', "FOUND", IF(Blah.descr ="x", "x", "The Rest")) as New_DECRIPTION

答案 5 :(得分:-1)

我对SQL SERVER的了解更多,那么可能是我的回答不是很有帮助,但无论如何这里是我的帮助:

尝试更改下面的代码段,

SELECT @blah = (CASE WHEN @fname IS NULL THEN 1 ELSE @blah END)

答案 6 :(得分:-1)

在我看来,当使用Sql server时,我发现变量无法在没有声明的情况下分配值。

我认为你必须这样做:

declare @fname nvarchar(50)
declare @blah int

然后你必须为变量赋值..

SET @fname = 'Bob'
SET @blah = 0

SELECT CASE WHEN @fname IS NULL THEN @blah = 1 ELSE @blah END;


IF (@blah > 0) THEN
   SELECT * FROM mytable
END IF;