代码之家  ›  专栏  ›  技术社区  ›  amit sutar

mysql中并列列的where条件后如何使用case?[副本]

  •  0
  • amit sutar  · 技术社区  · 6 年前

    我知道SQL CASE 语法如下:

    CASE
        WHEN search_condition THEN statement_list
        [WHEN search_condition THEN statement_list] ...
        [ELSE statement_list]
    END CASE
    

    但是,我不明白这是怎么回事,可能是因为我认为 if 陈述。

    如果我有一个字段在表中 user_role ,例如,其中包含“Manager”、“Part Time”等名称,如何生成字段 role_order 根据角色的不同,使用不同的数字。在本例中,“如果user_role='Manager',则role_order=5”。

    请注意,我正在寻找 教人钓鱼 回答而不是 给人一条鱼 回答。

    0 回复  |  直到 11 年前
        1
  •  106
  •   Kailas    10 年前

    CASE 更像是switch语句。它有两个语法可以使用。第一种方法允许您使用所需的任何比较语句:

    CASE 
        WHEN user_role = 'Manager' then 4
        WHEN user_name = 'Tom' then 27
        WHEN columnA <> columnB then 99
        ELSE -1 --unknown
    END
    

    第二种样式是当您只检查一个值时使用的,并且更加简洁:

    CASE user_role
        WHEN 'Manager' then 4
        WHEN 'Part Time' then 7
        ELSE -1 --unknown
    END
    
        2
  •  13
  •   Air    11 年前

    CASE 在MySQL中 statement 还有一个 expression ,每个用法略有不同。

    作为声明, 案例 工作原理与switch语句非常相似,并且在存储过程中非常有用,如文档(链接在上面)中的此示例所示:

    DELIMITER |
    
    CREATE PROCEDURE p()
      BEGIN
        DECLARE v INT DEFAULT 1;
    
        CASE v
          WHEN 2 THEN SELECT v;
          WHEN 3 THEN SELECT 0;
          ELSE
            BEGIN -- Do other stuff
            END;
        END CASE;
      END;
      |
    

    但是,作为一个表达式,它可以在子句中使用:

    SELECT *
      FROM employees
      ORDER BY
        CASE title
          WHEN "President" THEN 1
          WHEN "Manager" THEN 2
          ELSE 3
        END, surname
    

    此外,作为语句和表达式,第一个参数都可以省略,每个参数 WHEN 必须有条件。

    SELECT *
      FROM employees
      ORDER BY
        CASE 
          WHEN title = "President" THEN 1
          WHEN title = "Manager" THEN 2
          ELSE 3
        END, surname
    

    我提供这个答案是因为另一个答案没有提到 案例 既可以用作语句也可以用作表达式。它们之间的主要区别是语句形式以 END CASE 表达式以 END .

        3
  •  1
  •   zzapper    9 年前

    我想要一个简单的使用案例的例子,我可以玩,这甚至不需要一个表。这将返回奇数或偶数,具体取决于秒是奇数还是偶数

    SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;