【问题标题】:create a columns with a value determined by the CASE result创建具有由 CASE 结果确定的值的列
【发布时间】:2021-01-23 23:45:13
【问题描述】:

这是我的桌子:

CREATE TABLE IF NOT EXISTS numbers (
  num int(6) unsigned NOT NULL
) DEFAULT CHARSET=utf8;

INSERT INTO numbers (num) VALUES
  ('1'),
  ('2'),
  ('3'),
  ('4'),
  ('5');

这就是我想通过添加另一个列,其中 TRUE 表示 num 中的 1 或 2,其他所有内容为 FALSE:

| num | is_1_2
| --- | -------
| 1   | true
| 2   | true
| 3   | false
| 4   | false
| 5   | false

这是我的要求

SELECT num, (CASE WHEN  num IN (1,2)  THEN 'true' ELSE 'false') AS is_1_2
FROM numbers

但我明白了

查询错误:错误:ER_PARSE_ERROR:您的 SQL 中有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在第 1 行的 ') AS is_1_2 FROM numbers' 附近使用正确的语法

不明白为什么。

【问题讨论】:

    标签: mysql sql select case


    【解决方案1】:

    您似乎正在运行 MySQL。如果您满足于将真/假值表示为 1 和 0,则可以将查询简化为:

    select num, num in (1, 2) as is_1_2 from numbers
    

    这利用了 MySQL 在数字上下文中将 true 条件评估为 1 而将 false 条件评估为 0 的事实。

    【讨论】:

      【解决方案2】:

      你忘了结束

      SELECT num, (CASE WHEN  num IN (1,2)  THEN 'true' ELSE 'false' END) AS is_1_2
      FROM numbers
      

      【讨论】:

        【解决方案3】:

        你最后只是错过了一个 END。你可以阅读更多关于 CASE 声明here

        SELECT 
         num, 
         is_1_2 = CASE 
           WHEN  num IN (1,2) 
           THEN 'true' 
           ELSE 'false' 
         END
        FROM numbers
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多