diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index e69e7603e21..b75eadd5291 100644 --- a/mysql-test/r/join_outer.result +++ b/mysql-test/r/join_outer.result @@ -975,3 +975,11 @@ EMPNUM NAME GRP 0 KERI 10 9 BARRY NULL DROP TABLE t1,t2; +CREATE TABLE t1 (c11 int); +CREATE TABLE t2 (c21 int); +INSERT INTO t1 VALUES (30), (40), (50); +INSERT INTO t2 VALUES (300), (400), (500); +SELECT * FROM t1 LEFT JOIN t2 ON (c11=c21 AND c21=30) WHERE c11=40; +c11 c21 +40 NULL +DROP TABLE t1, t2; diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test index 670e7433926..7dd35f164d5 100644 --- a/mysql-test/t/join_outer.test +++ b/mysql-test/t/join_outer.test @@ -698,4 +698,16 @@ SELECT * FROM v1 WHERE EMPNUM < 10; DROP TABLE t1,t2; +# +# Test for bug #11285: false Item_equal on expression in outer join +# + +CREATE TABLE t1 (c11 int); +CREATE TABLE t2 (c21 int); +INSERT INTO t1 VALUES (30), (40), (50); +INSERT INTO t2 VALUES (300), (400), (500); + +SELECT * FROM t1 LEFT JOIN t2 ON (c11=c21 AND c21=30) WHERE c11=40; + +DROP TABLE t1, t2; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 7d57fd78c93..33f36fca9b2 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7064,7 +7064,7 @@ static COND* substitute_for_best_equal_field(COND *cond, List_iterator_fast it(cond_equal->current_level); while ((item_equal= it++)) { - eliminate_item_equal(cond, cond_equal->upper_levels, item_equal); + cond= eliminate_item_equal(cond, cond_equal->upper_levels, item_equal); } } }