You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决SQL CASE条件中LIKE匹配分类名称的冲突问题

解决SQL CASE语句的匹配优先级问题

核心问题出在CASE表达式的匹配逻辑:它是从上到下依次判断,只要匹配到第一个满足条件的分支就会立即返回结果,不会继续检查后续分支。因为'Johnny'字符串本身包含'John',所以你的原查询里第一个LIKE '%John%'会把两条记录都命中,导致所有结果都是'A'。

另外注意两个细节:你的表列是Name,但原查询里写的是first_name,这会导致列不存在的错误;Group是SQL的保留关键字,作为别名时最好用反引号(MySQL)或双引号(PostgreSQL等)包裹,避免语法报错。

修正后的查询(精确匹配推荐)

如果你的数据就是固定的John和Johnny,直接用精确匹配更高效:

SELECT 
    Name,
    CASE
        WHEN Name = 'Johnny' THEN 'B'
        WHEN Name = 'John' THEN 'A'
        ELSE NULL
    END AS `Group`
FROM Customers;

如果必须使用LIKE(比如有其他相似名称变种)

把更长、更具体的匹配条件放在前面:

SELECT 
    Name,
    CASE
        WHEN Name LIKE '%Johnny%' THEN 'B'
        WHEN Name LIKE '%John%' THEN 'A'
        ELSE NULL
    END AS `Group`
FROM Customers;

这样执行时,Johnny会先匹配到第一个分支返回'B',剩下的John才会匹配第二个分支返回'A',符合你的预期输出。

内容的提问来源于stack exchange,提问作者Captain_Cold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:24:57