如何在 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 A
或 B
或 C
仅应在 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 中使用嵌套案例?的主要内容,如果未能解决你的问题,请参考以下文章