diff options
Diffstat (limited to 'sql/item_subselect.cc')
-rw-r--r-- | sql/item_subselect.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 82954a664c0..6ec8b11d863 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -951,14 +951,19 @@ Item_in_subselect::row_value_transformer(JOIN *join) List_iterator_fast<Item> li(select_lex->item_list); for (uint i= 0; i < n; i++) { + Item *func; DBUG_ASSERT(left_expr->fixed && select_lex->ref_pointer_array[i]->fixed); if (select_lex->ref_pointer_array[i]-> check_cols(left_expr->el(i)->cols())) DBUG_RETURN(RES_ERROR); - Item *func= new Item_ref_null_helper(this, - select_lex->ref_pointer_array+i, - (char *) "<no matter>", - (char *) "<list ref>"); + if (join->having || select_lex->with_sum_func || + select_lex->group_list.elements) + func= new Item_ref_null_helper(this, + select_lex->ref_pointer_array+i, + (char *) "<no matter>", + (char *) "<list ref>"); + else + func= li++; func= eq_creator.create(new Item_direct_ref((*optimizer->get_cache())-> addr(i), |