【问题标题】:How can I use nested cases in mySQL?如何在 mySQL 中使用嵌套案例?
【发布时间】:2018-07-27 04:38:33
【问题描述】:

我想处理嵌套案例:

SELECT *, 
    GROUP_CONCAT(DISTINCT CONCAT(
    CASE
      WHEN data.name NOT "field" THEN   
        CASE
          WHEN data.category = "A" THEN "A"
          WHEN data.category = "B" THEN "B"
          ELSE "C"
        END,data.name
    END
   )ORDER BY FIND_IN_SET(data.category,"B,C,A") ASC, data.name ASC SEPARATOR " <br>") AS result
  FROM data;');

但我收到一条错误消息:

致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或 访问冲突:1064 您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 11 行的“data.name END”附近使用的语法

【问题讨论】:

  • pdo 与问题有何关联?
  • 删除嵌套的大小写,你会得到CASE WHEN data.name NOT "field" THEN [...] , data.name END。这不是有效的 SQL。我认为您需要在第二个 END 之后移动 data.name
  • @waka ABC 仅应在 data.name 不是 field 时出现
  • @Jarla 在下面检查我的答案,您没有在嵌套案例中添加括号,并且您将 data.name 放在嵌套案例中。检查下面的答案。
  • Not field is invalid try

标签: mysql if-statement nested group-concat


【解决方案1】:

您的查询中有一些语法错误。在您的查询编辑器中运行以下代码,就可以了。

SELECT 
 *,
GROUP_CONCAT(
DISTINCT CONCAT(
  CASE
    WHEN data.name = "field" 
    THEN (
      CASE
        WHEN data.category = "A" 
        THEN "A" 
        WHEN data.category = "B" 
        THEN "B" 
        ELSE "C" 
      END
    ) 
  END,
    data.name
) 
ORDER BY FIND_IN_SET(data.category, "B,C,A") ASC,
data.name ASC SEPARATOR " <br>"
) AS result 
 FROM DATA;

【讨论】:

  • @Jarla 将您的代码与我的代码进行比较,您的代码中有两个语法错误,如果您要更改它或只是复制并粘贴代码,它会显示结果。
  • @Jarla 将您的代码与我的代码进行比较,您的代码中有两个语法错误,如果您要更改它或只是复制并粘贴代码,它会显示结果。
猜你喜欢
  • 2021-05-30
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多