【问题标题】:How can I use ELSE IF inside GROUP_CONCAT?如何在 GROUP_CONCAT 中使用 ELSE IF?
【发布时间】:2018-01-30 13:04:59
【问题描述】:

我在 mySQL 查询中有一个 IF 语句,它运行良好:

 GROUP_CONCAT(DISTINCT CONCAT("animal:",if(animal.name="monkey","fred",""),",color: ",animal.color) SEPARATOR " <br>") AS animals

我现在想添加一个 ELSEIF:

  GROUP_CONCAT(DISTINCT CONCAT("animal:",if(animal.name="monkey","fred","")elseif(animal.name="cat","jane",""),",color: ",animal.color) SEPARATOR " <br>") AS animals

但我收到一条错误消息:

语法错误或访问冲突:1064 您的 SQL 中有错误 语法

【问题讨论】:

标签: mysql if-statement group-concat


【解决方案1】:

“if elseif endif”是一个控制语句,而 if() 是 MySQL 中的一个函数。虽然他们有相同的名字,但他们是不同的东西。

如果您有多个选项,可以使用 CASE 代替 IF。

SELECT 
    GROUP_CONCAT(DISTINCT CONCAT("animal:",
      CASE animal.name
        WHEN "monkey" THEN "fred"
        WHEN "cat" THEN "jane"
        ELSE "other"
      END,
      ",color: ",animal.color) SEPARATOR " <br>"
    ) AS animals
FROM (
  SELECT 'monkey' AS 'name', 'brown' AS 'color'
  UNION
  SELECT 'cat', 'white'
  UNION
  SELECT 'dog', 'black'
  ) AS animal

【讨论】:

  • 我按照你的建议尝试了:CASE animal.name WHEN "monkey" THEN "fred" END CASE。但我收到一个错误:Syntax error or access violation: 106 你能说明一下,你的意思是什么?
  • 终于找到了解决办法。最后写END是必要的。
【解决方案2】:

您必须在ifelse 部分添加if

group_concat(distinct concat("animal:",if(animal.name="monkey","fred",if(animal.name="cat","jane","")),",color: ",animal.color) separator " <br>") as animals

case 语法几乎相同

group_concat(distinct concat("animal:",case animal.name when "monkey" then "fred" when "cat" then "jane" case "dog" then "donald" else "",",color: ",animal.color) separator " <br>") as animals

【讨论】:

  • 但实际上我有大约 5 个 ELSE IF。那么我将如何使用不止一个来做到这一点?
  • 使用case操作符,几乎一样
  • 你为什么使用 MONKEY 和 CAT when 和 DOG case
  • 仍然出现`语法错误或访问冲突:1064`
猜你喜欢
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多