如何在 mySQL 中使用嵌套案例?

Posted

技术标签:

【中文标题】如何在 mySQL 中使用嵌套案例?【英文标题】:How can I use nested cases in 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 【参考方案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 将您的代码与我的代码进行比较,您的代码中有两个语法错误,如果您要更改它或只是复制并粘贴代码,它会显示结果。

以上是关于如何在 mySQL 中使用嵌套案例?的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套案例类中查找和修改字段?

如何使用“Seq”字段修改此嵌套案例类?

mysql嵌套计数-如何?

如何在 mySQL 中使用案例编写生肖查询

如何在 Mysql 中通过 LIKE 使用嵌套的 SELECT?

如何使用 mysql 本机 json 函数生成嵌套的 json 对象?