【问题标题】:CASE WHEN "__" LIKE "__" ELSE "__" MySQL ErrorCASE WHEN "__" LIKE "__" ELSE "__" MySQL 错误
【发布时间】:2020-09-22 10:41:15
【问题描述】:

我正在尝试通过 MySQL 标准化数据集中的广告系列命名约定。请看下面的代码;

SELECT 
`Campaign`
FROM 
`cost_per_platform`
case when `Campaign` like '%brand%' then 'Brand'
else 'Other' end

这是通过 DOMO.com MySQL 函数运行的。我收到以下错误;

数据库报告语法错误:您的 SQL 中有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在 'case when Campaign like '%brand%' 附近使用正确的语法 然后是第 5 行的 'Brand' 否则 'Other' end'

有人对修复有建议吗?谢谢您的帮助。

【问题讨论】:

  • 这个case 语句不应该在from 子句之前,例如select case ... end from table?
  • 语法无效。 SELECT ... FROM table_name CASE WHEN ... 不是有效的语法。 MySQL 不希望在您的 FROM 表名之后出现 CASE。我知道您希望将名称标准化,但您希望从查询中得到什么输出?

标签: mysql sql select domo


【解决方案1】:

您希望 select 子句中的 case 表达式:

select
    campaign,
    case when campaign like '%brand%' then 'Brand' else 'Other' end as new_campaign
from cost_per_platform

这会将第二列添加到结果集中,称为new_campaign,表示“标准化”值。

如果您想要一个 update 查询而不是(即,将现有值替换为“标准化”值)

update cost_per_platform
set 
campaign = case when campaign like '%brand%' then 'Brand' else 'Other' end

【讨论】:

  • 效果很好!谢谢你。如果我想添加另一个要包含的值,即除了 Brand 之外,如果我想添加另一个 LIKE、THEN、ELSE 语句,那么最好的方法是什么?
  • @Nick:您可以添加更多when 分支,例如:case when campaign like '%brand%' then 'Brand' when campaign like '%foo%' then 'foo' else 'Other' end
【解决方案2】:

SELECT 
if(`Campaign` like '%brand%', 'Brand', 'Other' ) as Campaign
FROM 
`cost_per_platform`

足以满足您的需求吗?

【讨论】:

    【解决方案3】:

    您的查询看起来像是谎言

    SELECT 
      case when `Campaign` like '%brand%' then 'Brand'
      else 'Other' end
    FROM 
    `cost_per_platform`
    

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 2023-03-20
      • 1970-01-01
      • 2017-08-15
      • 2015-11-02
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多