tidbv6.5.1使用视图库的表的时候嵌套case when会报错,显示错误 1105

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.1
【复现路径】使用视图库的表的时候嵌套case when会报错
【遇到的问题:问题现象及影响】

【资源配置】跟配置无关
【附件:截图/日志/监控】

错误码 1105 表示在 schema column 中找不到指定的列。因此,你的报错信息 “错误 1105” 可能是由于视图中的查询涉及到多个 CTE,TiDB 分别会在 buildTableRefBuildSelectSubq 两个过程中克隆 schema column 信息并赋予一个 hashcode (用于在投影消除阶段时父列和子列的关系映射)。由于使用了过期的 hashcode 这将导致关联条件列会被错误映射。

如果你的 SQL 中使用了嵌套的 CASE WHEN,可能会导致 TiDB 在执行时无法正确识别列名,从而报错 1105。这可能是因为 TiDB 在处理 CASE WHEN 语句时会生成一个临时列名,而这个列名可能与你的视图中的列名冲突,导致 TiDB 找不到指定的列。

为了解决这个问题,你可以尝试使用别名来避免列名冲突。例如,将 CASE WHEN 语句中的临时列名改为一个不会与视图中的列名冲突的名称,如下所示:

SELECT
  v1.id,
  v1.name,
  CASE
    WHEN v1.age > 18 THEN '成年人'
    ELSE '未成年人'
  END AS age_group
FROM my_view v1;

在这个例子中,我们将 CASE WHEN 语句中的临时列名改为 age_group

as ‘B1’ 换成 as B1 试试

依然报错

用case 字段 when 字段判断 then 结果1 else 结果2 end 的原发试试

你单独执行ifnull那一串能执行吗?
SELECT ISNULL(MAX(CASE WHEN 1=1 THEN (CASE WHEN a.i_re >0 THEN ‘1’ ELSE ‘0’ END)
ELSE ‘0’ END ),0) FROM a;
我直接这样执行都报错了,报
Incorrect parameter count in the call to native function ‘isnull’

已解决原因是max使用不对,跟tidb没有关系,谢谢大佬们

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。