diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index e69e7603e21c9faca98c9be02ce6cc216b4680de..b75eadd5291809ec1fef7637453154b7cd11f639 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 670e74339269f2c9e5262dff43b131c545c507a6..7dd35f164d557855ab8539a48ed35a2da45d8839 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 7d57fd78c93dbadb3b761dbdaeaeb7f7c858903b..33f36fca9b2d67175a1e86a461973c4fcdba7081 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<Item_equal> 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); } } }