XiaoMi / soar

SQL Optimizer And Rewriter
Apache License 2.0
8.67k stars 1.32k forks source link

同一张表被连接两次 #202

Closed illsion closed 5 years ago

illsion commented 5 years ago

SELECT element_table.tableName, element_field.field, table2.tableName, field2.field from element_tablerelation INNER JOIN element_table ON element_tablerelation.tableId = element_table.tableId INNER JOIN element_table as table2 ON element_tablerelation.TableId2= table2.tableId INNER JOIN element_field ON element_tablerelation.fieldId = element_field.fieldId INNER JOIN element_field as field2 ON element_tablerelation.FieldId2 = field2.fieldId where element_tablerelation.tableId= 1 相同的表在FROM子句中至少出现两次,可以简化为对该表的单次访问。 这个建议要怎么样实现?

LPX-E5BD8 commented 5 years ago

SELECT element_table.tableName, element_field.field, table2.tableName, field2.field from element_tablerelation INNER JOIN element_table ON element_tablerelation.tableId = element_table.tableId INNER JOIN element_table as table2 ON element_tablerelation.TableId2= table2.tableId INNER JOIN element_field ON element_tablerelation.fieldId = element_field.fieldId INNER JOIN element_field as field2 ON element_tablerelation.FieldId2 = field2.fieldId where element_tablerelation.tableId= 1 相同的表在FROM子句中至少出现两次,可以简化为对该表的单次访问。 这个建议要怎么样实现?

可以详细看下tidb parser里的结构体定义,针对subquery结构体进行递归检查什么的就可以