derived table must have its own alias报错bug

版本:5.3.1

复现流程:
第一条sql: select * from (select 1) group by 1;
第二条sql: select * from (select 1 union all select 2) group by 1;

期望现象:
都报错ERROR 1248 (42000): Every derived table must have its own alias

实际现象:
第二条sql可以正常进行

版本4.0.13
复现流程:
第一条sql: select * from (select 1) group by 1;
第二条sql: select * from (select 1 union all select 2) group by 1;

期望现象:
都报错ERROR 1248 (42000): Every derived table must have its own alias

实际现象:
第二条sql报错ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 49 near “group by 1”

这个应该是 tidb 的一个优化吧,允许用户在没有指定 alias 的情况下继续查询。

看下复现步骤,第一条报错,第二条不报错,所以我觉得不是优化,是union触发的bug,如果是优化的话,应该两条都不报错

OK,我没有看清楚,我再看下。

大概看了下,就是在做预处理的时候只判断了 ast.SelectStmt 的情况,没有判断 ast.SetOprStmt 的情况, 而 union 属于后者。

我倒觉得可以当个feature,不一定得修:joy: 。不过如果是影响到了什么场景的话,我提个 pr 去修下。

嗯,目前没有什么影响,只是碰到了提一下,因为之前也遇到过几个union造成的问题,所以想说是不是这块生成的语法树和物理执行计划确实有些问题

是的,我看了一下,很多场景下都没有考虑 from (… union …) 的情况。如果那边还有什么 union 相关的问题可以发出来一起修一下。

之前的忘记录在哪了,等我找到了看看,感谢

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。