# [KB]关于 TiDB 的 SQL 包含多表 join 时查询报错 index out of range [0] with length 0

## Issue

SQL 查询报错 `runtime error: index out of range \[0] with length 0`

SQL 类似:

```sql
SELECT c.t1,c.t2, t.sn, t2.t3, t2.t4, t2.t5, t2.t6, t2.t7, t2.t8
FROM  test c
INNER JOIN test1 t
ON c.asterm_id = t.id
left JOIN parsset_type t2
ON c.aet_type = t2.id
WHERE c.dlt = 0 AND t.n = '012573' 
LIMIT 0, 200;
```

## Root Cause

BUG Issue: [https://github.com/pingcap/tidb/issues/16784](https://github.com/pingcap/tidb/issues/16784)

涉及到三个及以上表做 join 时，优化器在做 `join reorder` 的阶段有一定概率会将表的 join 顺序做交换，概率取决于表数据量和统计信息。 此时 join 算子的 schema 结构和其子节点算子不一致，因为顺序的改变导致输出列的信息不匹配，在从 Chunk 提取并返回结果时 panic

## Diagnostic Steps

SQL 查询报错 `[err="runtime error: index out of range \[0] with length 0"]`错误栈信息包含关键字 GetBytes, 类似如下信息:

```log
[err="runtime error: index out of range [0] with length 0"] 
[stack="goroutine 6358772 [running]:ngithub.com/pingcap/tidb/server.(\*clientConn).Run.func1(0x3e39860, 0xc02844c240, 0xc01db63300)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:731 +0xee\npanic(0x360c8a0, 0xc092174180)
/usr/local/go/src/runtime/panic.go:679 +0x1b2ngithub.com/pingcap/tidb/server.(\*clientConn).writeResultset.func1(0xc004ce3128, 0x3e39860, 0xc005e8c1b0, 0xc01db63300)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:1679 +0x4e2\npanic(0x360c8a0, 0xc092174180)
/usr/local/go/src/runtime/panic.go:679 +0x1b2ngithub.com/pingcap/tidb/util/chunk.(\*Column).GetBytes(...)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/util/chunk/column.go:539\ngithub.com/pingcap/tidb/util/chunk.Row.GetBytes(...)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/util/chunk/row.go:77\ngithub.com/pingcap/tidb/server.dumpTextRow(0xc034cf4000, 0x4, 0x400, 0xc004d5c800, 0x9, 0x10, 0xc00b39c780, 0x0, 0xc004ce3048, 0x12f5b66, ...)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/util.go:327 +0x1858ngithub.com/pingcap/tidb/server.(\*clientConn).writeChunks(0xc01db63300, 0x3e39860, 0xc005e8c1b0, 0x3e58900, 0xc00b39c6e0, 0xc000023000, 0x1ca8026, 0x34f35c0)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:1757 +0x412ngithub.com/pingcap/tidb/server.(\*clientConn).writeResultset(0xc01db63300, 0x3e39860, 0xc005e8c1b0, 0x3e58900, 0xc00b39c6e0, 0x28900, 0x0, 0x0, 0x0)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:1692 +0x1f1ngithub.com/pingcap/tidb/server.(\*clientConn).handleStmt(0xc01db63300, 0x3e39860, 0xc005e8c1b0, 0x3e5e6c0, 0xc028972a00, 0x5cd7668, 0x0, 0x0, 0x1, 0x0, ...)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:1589 +0x23angithub.com/pingcap/tidb/server.(\*clientConn).handleQuery(0xc01db63300, 0x3e397a0, 0xc004b5f300, 0xc003bed861, 0x1d7, 0x0, 0x0)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:1455 +0x420ngithub.com/pingcap/tidb/server.(\*clientConn).dispatch(0xc01db63300, 0x3e397a0, 0xc004b5f300, 0xc003bed860, 0x1d8, 0x1d7, 0x0, 0x0)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:1029 +0x6f1ngithub.com/pingcap/tidb/server.(\*clientConn).Run(0xc01db63300, 0x3e39860, 0xc02844c240)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/conn.go:792 +0x293ngithub.com/pingcap/tidb/server.(\*Server).onConn(0xc0012de4e0, 0xc01db63300)
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/server.go:461 +0xaf4\ncreated by github.com/pingcap/tidb/server.(\*Server).Run
/home/jenkins/agent/workspace/build-linux-amd64-enterprise/go/src/github.com/pingcap/tidb/server/server.go:364
```

## Resolution

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

修复版本: v5.0.1 及之后版本

## Workaround

N/A