# # Table elimination (MWL#17) tests # --disable_warnings drop table if exists t0, t1, t2, t3; --enable_warnings create table t1 (a int); insert into t1 values (0),(1),(2),(3); create table t0 as select * from t1; create table t2 (a int primary key, b int) as select a, a as b from t1 where a in (1,2); create table t3 (a int primary key, b int) as select a, a as b from t1 where a in (1,3); --echo # This will be eliminated: explain select t1.a from t1 left join t2 on t2.a=t1.a; explain extended select t1.a from t1 left join t2 on t2.a=t1.a; select t1.a from t1 left join t2 on t2.a=t1.a; --echo # This will not be eliminated as t2.b is in in select list: explain select * from t1 left join t2 on t2.a=t1.a; --echo # This will not be eliminated as t2.b is in in order list: explain select t1.a from t1 left join t2 on t2.a=t1.a order by t2.b; --echo # This will not be eliminated as t2.b is in group list: explain select t1.a from t1 left join t2 on t2.a=t1.a group by t2.b; --echo # This will not be eliminated as t2.b is in the WHERE explain select t1.a from t1 left join t2 on t2.a=t1.a where t2.b < 3 or t2.b is null; --echo # Elimination of multiple tables: explain select t1.a from t1 left join (t2 join t3) on t2.a=t1.a and t3.a=t1.a; --echo # Elimination of multiple tables (2): explain select t1.a from t1 left join (t2 join t3 on t2.b=t3.b) on t2.a=t1.a and t3.a=t1.a; --echo # Elimination when done within an outer join nest: explain extended select t0.* from t0 left join (t1 left join (t2 join t3 on t2.b=t3.b) on t2.a=t1.a and t3.a=t1.a) on t0.a=t1.a; --echo # Elimination with aggregate functions explain select count(*) from t1 left join t2 on t2.a=t1.a; explain select count(1) from t1 left join t2 on t2.a=t1.a; explain select count(1) from t1 left join t2 on t2.a=t1.a group by t1.a; --echo This must not use elimination: explain select count(1) from t1 left join t2 on t2.a=t1.a group by t2.a; drop table t0, t1, t2, t3;