代码之家  ›  专栏  ›  技术社区  ›  abksharma

在mysql批处理脚本中使用If语句而不生成过程

  •  -1
  • abksharma  · 技术社区  · 8 年前

    下面的Sql server语句如何转换为Mysql。而不是将其作为存储过程。我们正在将Sql查询迁移到Mysql。

    SQL SERVER 1

    IF (@val = true)
    BEGIN
        Insert into custom_report values (1,2,3);
    END
    ELSE
    BEGIN
        Insert into custom_report values (4,5,6);
    END;
    

    SQL SERVER 2

    IF (@val = true)
    BEGIN
        SELECT * FROM custom_report WHERE is_active = 1;
    END
    ELSE
    BEGIN
        SELECT * FROM custom_report WHERE is_active = 0;
    END;
    
    3 回复  |  直到 8 年前
        1
  •  1
  •   Raymond Nijland    8 年前

    您还可以在这些MySQL查询语法中重写SQL Server查询语法。

    请记住,变量必须是 1 , 0 , true 或 false 否则,自动广播将无法正确处理检查。

    SQL SERVER 1

    使用 IF 陈述

    SET @variable = <variable>;
    
    INSERT INTO
     custom_report 
    (<columns>) # is less error prone when defining
    VALUES(
         IF(@variable = true, 1, 4)
       , IF(@variable = true, 2, 5)
       , IF(@variable = true, 3, 6)
    ) 
    

    使用 CASE END 陈述

    SET @variable = <variable>;
    
    INSERT INTO
     custom_report 
    (<columns>) # is less error prone when defining
    VALUES(
         (
           CASE
             WHEN @variable = true
             THEN 1
             ELSE 4
           END
         )
       , (
           CASE
            WHEN @variable = true
            THEN 2
            ELSE 5  
           END
         )
       , (
           CASE
             WHEN @variable = true
             THEN 3
             ELSE 6
           END
         )
    ) 
    

    SQL SERVER 2

    使用 如果 陈述

    SET @variable = <variable>;
    
    SELECT 
     *
    FROM 
      custom_report
    WHERE
     is_active = IF(@variable = true, 1, 0)
    

    使用 案件结束 陈述

    SET @variable = <variable>;
    
    SELECT 
     *
    FROM 
      custom_report
    WHERE
     is_active = 
       CASE
         WHEN @variable = true
         THEN 1 
         ELSE 0 
       END
    
        2
  •  1
  •   Barmar    8 年前

    你可以测试 @ 在查询本身中,您不需要 IF 陈述

    SELECT *
    FROM custom_report
    WHERE is_active = @val
    

    我假设 @val 是 1 或 0 ,因为你把它和 true ,这与 1. .

    在 INSERT 语句您可以在值中使用条件:

    INSERT INTO custom_report
    VALUES (IF(@val, 1, 4), IF(@val, 2, 5), IF(@val, 3, 6));
    
        3
  •  0
  •   abksharma    8 年前

    以上MYSQL声明如下。使用“如果”

    set @val = {0};
    set @query1 = if(@val = true,'select * from  custom_report where is_active =1 ','select * from custom_report where is_active =0');
    SET @stmt_str =  @query1;
    PREPARE stmt FROM @stmt_str;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    
    推荐文章