V5.0.0 查询报 [Err] 1105 - runtime error: index out of range [-1]

表结构如下:

CREATE TABLE c (
id bigint(12) NOT NULL,product_id bigint(12) DEFAULT NULL,
fof_id varchar(32) DEFAULT NULL ,
product_name varchar(100) DEFAULT NULL ,
trans_code varchar(3) NOT NULL ,
sub_trans_code varchar(6) DEFAULT NULL ,
status varchar(2) NOT NULL ,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
KEY idx_charge_basic_config_pcode (product_id,trans_code,sub_trans_code),
KEY idx_charge_basic_config_fof_id (fof_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ;

CREATE TABLE d (
id bigint(12) NOT NULL AUTO_INCREMENT ,
basic_config_id bigint(12) NOT NULL ,
product_id bigint(12) NOT NULL ,
trans_code varchar(3) NOT NULL ,
sub_trans_code varchar(6) NOT NULL,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
KEY idx_charge_synthetic_config_bci (basic_config_id),
KEY idx_charge_synthetic_config_pcode (product_id,trans_code,sub_trans_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ;

查询sql 如下:

SELECT
*
FROM
(
SELECT
c.product_id AS productId,
c.product_name AS productName,
c.trans_code AS transCode

FROM
c
LEFT JOIN d ON c.id = d.basic_config_id

) tb1
GROUP BY
productId,
transCode

之前测试v5.0.0-rc版本没有这个问题,升级到GA版本后出现的。因为也无需要暂时不能取消‘only_full_group_by’。

感觉和这个问题一样。v5.0.0 EXPLAIN SQL指令後發生 ERROR 2006 (HY000): MySQL server has gone away & Error Code: 1105. runtime error: index out of range [-1]

其实这个应该不算 TiDB 的问题,sql 有select * 的逻辑本来就不符合 only_full_group_by 的约束,如果是 select productId,transCode 就满足 only_full_group_by 的约束了。

因为这个报错返回 index out of range[-1],所以第一时间没考虑到 only_full_group_by 的问题。

个人建议该类 sql_mode 约束的报错是不是能返回的详细点,例如这个例子可以返回 SELECT list is not in GROUP BY clause and contains nonaggregated column ‘xxx’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

嗯, 麻烦可以反馈下具体的 tidb.log 里的错误栈信息,完整的上传下,多谢。

取自 tidb.log:

index_out_of_range_tidb_errorlog_20210427.txt (4.5 KB)

是同一个问题,错误堆栈看起来也一样。

同时测试了一下, v4.0.12 不报错,先这样绕过吧,等修复,多谢。

好的,谢谢!

:+1: