diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 9436ad7e840..1c7293fd89d 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2925,34 +2925,26 @@ sort_keyuse(KEYUSE *a,KEYUSE *b) nested_join_table IN Nested join pseudo-table to process end INOUT End of the key field array and_level INOUT And-level - + DESCRIPTION This function populates KEY_FIELD array with entries generated from the ON condition of the given nested join, and does the same for nested joins contained within this nested join. - - IMPLEMENTATION + + NOTES We can add accesses to the tables that are direct children of this nested join (1), and are not inner tables w.r.t their neighbours (2). Example for #1 (outer brackets pair denotes nested join this function is invoked for): - ... LEFT JOIN (t1 LEFT JOIN (t2 ... ) ) ON cond - Example for #2: - ... LEFT JOIN (t1 LEFT JOIN t2 ) ON cond - In examples 1-2 for condition cond, we can add 'ref' access candidates to t1 only. - Example #3: - - ... LEFT JOIN (t1, t2 JOIN t3 ON inner_cond) ON cond - + ... LEFT JOIN (t1, t2 LEFT JOIN t3 ON inner_cond) ON cond Here we can add 'ref' access candidates for t1 and t2, but not for t3. - */ static void add_key_fields_for_nj(TABLE_LIST *nested_join_table, @@ -2969,7 +2961,7 @@ static void add_key_fields_for_nj(TABLE_LIST *nested_join_table, add_key_fields_for_nj(table, end, and_level); else if (!table->on_expr) - tables |= table->table->map; + tables |= table->table->map; } add_key_fields(end, and_level, nested_join_table->on_expr, tables); }