# [KB]关于 TiDB 的 SQL 查询报错 ERROR 1105 (HY000)  inner child of Projection should be IndexLookupReader

## Description

SQL 查询报错 `"ERROR 1105 (HY000): inner child of Projection should be IndexLookupReader, but got \*core.PhysicalProjection"`

### 复现步骤

```sql
mysql> drop table if exists t1, t2;
Query OK, 0 rows affected (0.03 sec)

mysql> create table t1(a int, b varchar(8));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t1 values(1,'1');
Query OK, 1 row affected (0.00 sec)

mysql> create table t2(a int , b varchar(8) GENERATED ALWAYS AS (c) VIRTUAL, c varchar(8), PRIMARY KEY (a));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t2(a) values(1);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT /*+ tidb_inlj(t2) */ t2.b, t1.b from t1 join t2 ON t2.a=t1.a;
ERROR 1105 (HY000): inner child of Projection should be IndexLookupReader, but got *core.PhysicalProjection
```

## Root Cause

Github Issue：[https://github.com/pingcap/tidb/issues/25447](https://github.com/pingcap/tidb/issues/25447)

[https://github.com/pingcap/tidb/pull/12640](https://github.com/pingcap/tidb/pull/12640) 首先支持了 projection 作为 index join 的 inner child，但当时 projection 的子节点只会为 IndexLookUp，所以代码里加了这么一个报错检查（起到类似 assert 作用）；后来 TiDB 支持了 virtual column，导致了 Projection -> PhysicalTableReader 这种 plan 可能作为 index join 的 inner child，所以执行的时候遇到这个检查就报错了。

## Diagnostic Steps

1. SQL 执行遇到报错 "ERROR 1105 (HY000): inner child of Projection should be IndexLookupReader, but got \*core.PhysicalProjection"

2. 查看执行计划是 indexjoin

## Resolution

升级到 v5.2.0 及以上版本修复

PR：[https://github.com/pingcap/tidb/pull/26720](https://github.com/pingcap/tidb/pull/26720)

## Workaround

先通过 hint 不选 index join 让查询不再报错,比如改写为 hash join

```sql
SELECT /*+ hash_join(t2) */ t2.b, t1.b from t1 join t2 ON t2.a=t1.a;
+------+------+
| b    | b    |
+------+------+
| NULL | 1    |
+------+------+
1 row in set (0.01 sec)
```

## Affect Version(optional)

v4.0.0,v4.0.1,v4.0.2,v4.0.3,v4.0.4,v4.0.5,v4.0.6,v4.0.7,v4.0.8,v4.0.9,v4.0.10,v4.0.11,v4.0.12,v4.0.13,v5.0.0,v5.0.1,v5.0.2,v5.0.3,v5.1.0,v4.0.14,v5.1.1,v4.0.15,v5.0.4,v5.1.2,v5.1.3