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

错误码 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