错误码 1105 表示在 schema column 中找不到指定的列。因此,你的报错信息 “错误 1105” 可能是由于视图中的查询涉及到多个 CTE,TiDB 分别会在 buildTableRef
和 BuildSelectSubq
两个过程中克隆 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