Loading mysql-test/r/join_nested.result +22 −0 Original line number Diff line number Diff line Loading @@ -1321,3 +1321,25 @@ NULL NULL NULL 18 NULL NULL 19 NULL NULL DROP TABLE t1,t2,t3; CREATE TABLE t1 (c11 int); CREATE TABLE t2 (c21 int); CREATE TABLE t3 (c31 int); INSERT INTO t1 VALUES (4), (5); SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; c11 c21 4 NULL 5 NULL EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 system NULL NULL NULL NULL 0 const row not found 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; c11 c21 c31 4 NULL NULL 5 NULL NULL EXPLAIN SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 1 SIMPLE t2 ALL NULL NULL NULL NULL 0 1 SIMPLE t3 ALL NULL NULL NULL NULL 0 DROP TABLE t1,t2,t3; mysql-test/t/join_nested.test +18 −0 Original line number Diff line number Diff line Loading @@ -752,3 +752,21 @@ EXPLAIN SELECT a, b, c FROM t1 LEFT JOIN (t2, t3) ON b < 3 and b = c; SELECT a, b, c FROM t1 LEFT JOIN (t2, t3) ON b < 3 and b = c; DROP TABLE t1,t2,t3; # # Test for bug #11284: empty table in a nested left join # CREATE TABLE t1 (c11 int); CREATE TABLE t2 (c21 int); CREATE TABLE t3 (c31 int); INSERT INTO t1 VALUES (4), (5); SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; EXPLAIN SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; DROP TABLE t1,t2,t3; sql/sql_select.cc +1 −1 Original line number Diff line number Diff line Loading @@ -2158,7 +2158,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds, if (*s->on_expr_ref) { /* s is the only inner table of an outer join */ if (!table->file->records) if (!table->file->records && !embedding) { // Empty table s->dependent= 0; // Ignore LEFT JOIN depend. set_position(join,const_count++,s,(KEYUSE*) 0); Loading Loading
mysql-test/r/join_nested.result +22 −0 Original line number Diff line number Diff line Loading @@ -1321,3 +1321,25 @@ NULL NULL NULL 18 NULL NULL 19 NULL NULL DROP TABLE t1,t2,t3; CREATE TABLE t1 (c11 int); CREATE TABLE t2 (c21 int); CREATE TABLE t3 (c31 int); INSERT INTO t1 VALUES (4), (5); SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; c11 c21 4 NULL 5 NULL EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 system NULL NULL NULL NULL 0 const row not found 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; c11 c21 c31 4 NULL NULL 5 NULL NULL EXPLAIN SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 1 SIMPLE t2 ALL NULL NULL NULL NULL 0 1 SIMPLE t3 ALL NULL NULL NULL NULL 0 DROP TABLE t1,t2,t3;
mysql-test/t/join_nested.test +18 −0 Original line number Diff line number Diff line Loading @@ -752,3 +752,21 @@ EXPLAIN SELECT a, b, c FROM t1 LEFT JOIN (t2, t3) ON b < 3 and b = c; SELECT a, b, c FROM t1 LEFT JOIN (t2, t3) ON b < 3 and b = c; DROP TABLE t1,t2,t3; # # Test for bug #11284: empty table in a nested left join # CREATE TABLE t1 (c11 int); CREATE TABLE t2 (c21 int); CREATE TABLE t3 (c31 int); INSERT INTO t1 VALUES (4), (5); SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON c11=c21; SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; EXPLAIN SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21; DROP TABLE t1,t2,t3;
sql/sql_select.cc +1 −1 Original line number Diff line number Diff line Loading @@ -2158,7 +2158,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds, if (*s->on_expr_ref) { /* s is the only inner table of an outer join */ if (!table->file->records) if (!table->file->records && !embedding) { // Empty table s->dependent= 0; // Ignore LEFT JOIN depend. set_position(join,const_count++,s,(KEYUSE*) 0); Loading