Wrong result with semijoin=off,derived_merge=on , right join and subquery

Bug #806504 reported by Philip Stoev
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MariaDB
Fix Released
High
Igor Babaev

Bug Description

The following query

SELECT *
FROM t2
RIGHT JOIN ( SELECT * FROM t1 ) AS alias2
ON alias2.f10 != 0
WHERE alias2.f10 IN ( SELECT f11 FROM t1 );

returns no rows when executed with derived_merge=on,semijoin=off and 1 row in all other cases (e.g. when run with other switches or by manually in-lining the derived table, or inlining the subquery, rotating the join to be LEFT JOIN).

Explain:

| 1 | PRIMARY | t1 | system | NULL | NULL | NULL | NULL | 1 | |
| 1 | PRIMARY | t2 | ALL | NULL | NULL | NULL | NULL | 2 | |
| 3 | SUBQUERY | t1 | system | NULL | NULL | NULL | NULL | 1 | |

minimal optimizer switch:derived_merge=on,semijoin=off

full optimizer switch:

index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=off,loosescan=off,materialization=on,in_to_exists=on,semijoin=off,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=on,mrr_cost_based=off,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=on,table_elimination=on

test case:

CREATE TABLE t1 ( f10 int, f11 int) ;
INSERT IGNORE INTO t1 VALUES (0,0);

CREATE TABLE t2 ( f11 int) ;
INSERT INTO t2 VALUES (0),(0);

SELECT *
FROM t2
RIGHT JOIN ( SELECT * FROM t1 ) AS alias2
ON alias2.f10 != 0
WHERE alias2.f10 IN ( SELECT f11 FROM t1 );

Changed in maria:
milestone: none → 5.3
assignee: nobody → Igor Babaev (igorb-seattle)
description: updated
Changed in maria:
status: New → Confirmed
importance: Undecided → High
Changed in maria:
status: Confirmed → Fix Committed
Changed in maria:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.