12810 lines
531 KiB
Plaintext
12810 lines
531 KiB
Plaintext
set optimizer_switch='batched_key_access=on,mrr_cost_based=off';
|
|
set optimizer_switch='semijoin=on,loosescan=on';
|
|
set @old_opt_switch=@@optimizer_switch;
|
|
set optimizer_switch='subquery_materialization_cost_based=off';
|
|
drop table if exists t0, t1, t2, t10, t11, t12;
|
|
create table t1 (a int not null, b int, primary key (a));
|
|
create table t2 (a int not null, primary key (a));
|
|
create table t3 (a int not null, b int, primary key (a));
|
|
insert into t1 values (1,10), (2,20), (3,30), (4,40);
|
|
insert into t2 values (2), (3), (4), (5);
|
|
insert into t3 values (10,3), (20,4), (30,5);
|
|
select * from t2 where t2.a in (select a from t1);
|
|
a
|
|
2
|
|
3
|
|
4
|
|
explain select * from t2 where t2.a in (select a from t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL index PRIMARY PRIMARY 4 NULL 4 100.00 Using index
|
|
1 SIMPLE t1 NULL eq_ref PRIMARY PRIMARY 4 test.t2.a 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t1` join `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`a`)
|
|
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
|
a
|
|
2
|
|
4
|
|
explain select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL PRIMARY NULL NULL NULL 4 75.00 Using where
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`b` <> 30))
|
|
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
|
a
|
|
2
|
|
3
|
|
explain select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL index PRIMARY PRIMARY 4 NULL 3 100.00 Using index
|
|
1 SIMPLE t1 NULL ALL PRIMARY NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t1` join `test`.`t3` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`b` = `test`.`t3`.`a`))
|
|
drop table t1, t2, t3;
|
|
create table t1 (a int, b int, index a (a,b));
|
|
create table t2 (a int, index a (a));
|
|
create table t3 (a int, b int, index a (a));
|
|
insert into t1 values (1,10), (2,20), (3,30), (4,40);
|
|
create table t0(a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
insert into t1
|
|
select rand()*100000+200,rand()*100000 from t0 A, t0 B, t0 C, t0 D;
|
|
insert into t2 values (2), (3), (4), (5);
|
|
insert into t3 values (10,3), (20,4), (30,5);
|
|
select * from t2 where t2.a in (select a from t1);
|
|
a
|
|
2
|
|
3
|
|
4
|
|
explain select * from t2 where t2.a in (select a from t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index a a 10 NULL 10004 100.00 Using index; LooseScan
|
|
1 SIMPLE t2 NULL index a a 5 NULL 4 25.00 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where (`test`.`t2`.`a` = `test`.`t1`.`a`)
|
|
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
|
a
|
|
2
|
|
4
|
|
explain select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index a a 10 NULL 10004 90.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t2 NULL index a a 5 NULL 4 25.00 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`b` <> 30))
|
|
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
|
a
|
|
2
|
|
3
|
|
explain select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index a a 10 NULL 10004 100.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t3 NULL ref a a 5 test.t1.b 2 100.00 Using index; FirstMatch(t1)
|
|
1 SIMPLE t2 NULL index a a 5 NULL 4 25.00 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1` join `test`.`t3`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`a` = `test`.`t1`.`b`))
|
|
insert into t1 values (3,31);
|
|
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
|
a
|
|
2
|
|
3
|
|
4
|
|
select * from t2 where t2.a in (select a from t1 where t1.b <> 30 and t1.b <> 31);
|
|
a
|
|
2
|
|
4
|
|
explain select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index a a 10 NULL 10005 90.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t2 NULL index a a 5 NULL 4 25.00 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`b` <> 30))
|
|
drop table t0, t1, t2, t3;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1(a int, b int);
|
|
insert into t1 values (0,0),(1,1),(2,2);
|
|
create table t2 as select * from t1;
|
|
create table t11(a int, b int);
|
|
create table t10 (pk int, a int, primary key(pk));
|
|
insert into t10 select a,a from t0;
|
|
create table t12 like t10;
|
|
insert into t12 select * from t10;
|
|
Flattened because of dependency, t10=func(t1)
|
|
explain select * from t1 where a in (select pk from t10);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
1 SIMPLE t10 NULL eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t10` join `test`.`t1` where (`test`.`t10`.`pk` = `test`.`t1`.`a`)
|
|
select * from t1 where a in (select pk from t10);
|
|
a b
|
|
0 0
|
|
1 1
|
|
2 2
|
|
A confluent case of dependency
|
|
explain select * from t1 where a in (select a from t10 where pk=12);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t10` join `test`.`t1` where (multiple equal(12, NULL) and multiple equal(`test`.`t1`.`a`, NULL))
|
|
select * from t1 where a in (select a from t10 where pk=12);
|
|
a b
|
|
explain select * from t1 where a in (select a from t10 where pk=9);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t10 NULL const PRIMARY PRIMARY 4 const 1 100.00 NULL
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 33.33 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t10` join `test`.`t1` where ((`test`.`t1`.`a` = '9'))
|
|
select * from t1 where a in (select a from t10 where pk=9);
|
|
a b
|
|
An empty table inside
|
|
explain select * from t1 where a in (select a from t11);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t11 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join (`test`.`t11`) where (`test`.`t1`.`a` = `test`.`t11`.`a`)
|
|
select * from t1 where a in (select a from t11);
|
|
a b
|
|
explain select * from t1 where a in (select pk from t10) and b in (select pk from t10);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
1 SIMPLE t10 NULL eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using index
|
|
1 SIMPLE t10 NULL eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t10` join `test`.`t10` join `test`.`t1` where ((`test`.`t10`.`pk` = `test`.`t1`.`b`) and (`test`.`t10`.`pk` = `test`.`t1`.`a`))
|
|
select * from t1 where a in (select pk from t10) and b in (select pk from t10);
|
|
a b
|
|
0 0
|
|
1 1
|
|
2 2
|
|
flattening a nested subquery
|
|
explain select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
1 SIMPLE t10 NULL eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using where
|
|
1 SIMPLE t12 NULL eq_ref PRIMARY PRIMARY 4 test.t10.a 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t10` join `test`.`t12` join `test`.`t1` where ((`test`.`t10`.`pk` = `test`.`t1`.`a`) and (`test`.`t12`.`pk` = `test`.`t10`.`a`))
|
|
select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
|
|
a b
|
|
0 0
|
|
1 1
|
|
2 2
|
|
flattening subquery w/ several tables
|
|
explain select * from t1 where a in (select t10.pk from t10, t12 where t12.pk=t10.a);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
1 SIMPLE t10 NULL eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using where
|
|
1 SIMPLE t12 NULL eq_ref PRIMARY PRIMARY 4 test.t10.a 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t10` join `test`.`t12` join `test`.`t1` where ((`test`.`t10`.`pk` = `test`.`t1`.`a`) and (`test`.`t12`.`pk` = `test`.`t10`.`a`))
|
|
subqueries within outer joins go into ON expr.
|
|
explAin
|
|
select * from t1 left join (t2 A, t2 B) on ( A.A= t1.A And B.A in (select pk from t10));
|
|
id select_type tABle pArtitions type possiBle_keys key key_len ref rows filtered ExtrA
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 NULL
|
|
1 SIMPLE A NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
1 SIMPLE B NULL ALL NULL NULL NULL NULL 3 100.00 NULL
|
|
1 SIMPLE t10 NULL eq_ref PRIMARY PRIMARY 4 test.B.A 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`A` AS `A`,`test`.`t1`.`B` AS `B`,`test`.`A`.`A` AS `A`,`test`.`A`.`B` AS `B`,`test`.`B`.`A` AS `A`,`test`.`B`.`B` AS `B` from `test`.`t1` left join (`test`.`t10` join `test`.`t2` `A` join `test`.`t2` `B`) on(((`test`.`t10`.`pk` = `test`.`B`.`A`) And (`test`.`A`.`A` = `test`.`t1`.`A`))) where true
|
|
t2 should be wrapped into OJ-nest, so we have "t1 LJ (t2 J t10)"
|
|
explAin
|
|
select * from t1 left join t2 on (t2.A= t1.A And t2.A in (select pk from t10));
|
|
id select_type tABle pArtitions type possiBle_keys key key_len ref rows filtered ExtrA
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 NULL
|
|
1 SIMPLE t10 NULL eq_ref PRIMARY PRIMARY 4 test.t1.A 1 100.00 Using index
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`A` AS `A`,`test`.`t1`.`B` AS `B`,`test`.`t2`.`A` AS `A`,`test`.`t2`.`B` AS `B` from `test`.`t1` left join (`test`.`t10` join `test`.`t2`) on(((`test`.`t10`.`pk` = `test`.`t1`.`A`) And (`test`.`t2`.`A` = `test`.`t1`.`A`))) where true
|
|
we shouldn't flatten if we're going to get a join of > MAX_TABLES.
|
|
explain select * from
|
|
t1 s00, t1 s01, t1 s02, t1 s03, t1 s04,t1 s05,t1 s06,t1 s07,t1 s08,t1 s09,
|
|
t1 s10, t1 s11, t1 s12, t1 s13, t1 s14,t1 s15,t1 s16,t1 s17,t1 s18,t1 s19,
|
|
t1 s20, t1 s21, t1 s22, t1 s23, t1 s24,t1 s25,t1 s26,t1 s27,t1 s28,t1 s29,
|
|
t1 s30, t1 s31, t1 s32, t1 s33, t1 s34,t1 s35,t1 s36,t1 s37,t1 s38,t1 s39,
|
|
t1 s40, t1 s41, t1 s42, t1 s43, t1 s44,t1 s45,t1 s46,t1 s47,t1 s48,t1 s49
|
|
where
|
|
s00.a in (
|
|
select m00.a from
|
|
t1 m00, t1 m01, t1 m02, t1 m03, t1 m04,t1 m05,t1 m06,t1 m07,t1 m08,t1 m09,
|
|
t1 m10, t1 m11, t1 m12, t1 m13, t1 m14,t1 m15,t1 m16,t1 m17,t1 m18,t1 m19
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY s00 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
1 PRIMARY s01 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s02 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s03 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s04 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s05 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s06 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s07 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s08 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s09 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s10 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s11 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s12 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s13 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s14 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s15 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s16 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s17 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s18 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s19 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s20 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s21 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s22 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s23 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s24 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s25 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s26 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s27 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s28 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s29 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s30 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s31 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s32 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s33 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s34 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s35 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s36 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s37 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s38 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s39 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s40 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s41 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s42 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s43 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s44 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s45 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s46 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s47 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s48 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 PRIMARY s49 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m00 NULL ALL NULL NULL NULL NULL 3 33.33 Using where
|
|
2 DEPENDENT SUBQUERY m01 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m02 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m03 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m04 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m05 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m06 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m07 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m08 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m09 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m10 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m11 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m12 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m13 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m14 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m15 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m16 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m17 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m18 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY m19 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`s00`.`a` AS `a`,`test`.`s00`.`b` AS `b`,`test`.`s01`.`a` AS `a`,`test`.`s01`.`b` AS `b`,`test`.`s02`.`a` AS `a`,`test`.`s02`.`b` AS `b`,`test`.`s03`.`a` AS `a`,`test`.`s03`.`b` AS `b`,`test`.`s04`.`a` AS `a`,`test`.`s04`.`b` AS `b`,`test`.`s05`.`a` AS `a`,`test`.`s05`.`b` AS `b`,`test`.`s06`.`a` AS `a`,`test`.`s06`.`b` AS `b`,`test`.`s07`.`a` AS `a`,`test`.`s07`.`b` AS `b`,`test`.`s08`.`a` AS `a`,`test`.`s08`.`b` AS `b`,`test`.`s09`.`a` AS `a`,`test`.`s09`.`b` AS `b`,`test`.`s10`.`a` AS `a`,`test`.`s10`.`b` AS `b`,`test`.`s11`.`a` AS `a`,`test`.`s11`.`b` AS `b`,`test`.`s12`.`a` AS `a`,`test`.`s12`.`b` AS `b`,`test`.`s13`.`a` AS `a`,`test`.`s13`.`b` AS `b`,`test`.`s14`.`a` AS `a`,`test`.`s14`.`b` AS `b`,`test`.`s15`.`a` AS `a`,`test`.`s15`.`b` AS `b`,`test`.`s16`.`a` AS `a`,`test`.`s16`.`b` AS `b`,`test`.`s17`.`a` AS `a`,`test`.`s17`.`b` AS `b`,`test`.`s18`.`a` AS `a`,`test`.`s18`.`b` AS `b`,`test`.`s19`.`a` AS `a`,`test`.`s19`.`b` AS `b`,`test`.`s20`.`a` AS `a`,`test`.`s20`.`b` AS `b`,`test`.`s21`.`a` AS `a`,`test`.`s21`.`b` AS `b`,`test`.`s22`.`a` AS `a`,`test`.`s22`.`b` AS `b`,`test`.`s23`.`a` AS `a`,`test`.`s23`.`b` AS `b`,`test`.`s24`.`a` AS `a`,`test`.`s24`.`b` AS `b`,`test`.`s25`.`a` AS `a`,`test`.`s25`.`b` AS `b`,`test`.`s26`.`a` AS `a`,`test`.`s26`.`b` AS `b`,`test`.`s27`.`a` AS `a`,`test`.`s27`.`b` AS `b`,`test`.`s28`.`a` AS `a`,`test`.`s28`.`b` AS `b`,`test`.`s29`.`a` AS `a`,`test`.`s29`.`b` AS `b`,`test`.`s30`.`a` AS `a`,`test`.`s30`.`b` AS `b`,`test`.`s31`.`a` AS `a`,`test`.`s31`.`b` AS `b`,`test`.`s32`.`a` AS `a`,`test`.`s32`.`b` AS `b`,`test`.`s33`.`a` AS `a`,`test`.`s33`.`b` AS `b`,`test`.`s34`.`a` AS `a`,`test`.`s34`.`b` AS `b`,`test`.`s35`.`a` AS `a`,`test`.`s35`.`b` AS `b`,`test`.`s36`.`a` AS `a`,`test`.`s36`.`b` AS `b`,`test`.`s37`.`a` AS `a`,`test`.`s37`.`b` AS `b`,`test`.`s38`.`a` AS `a`,`test`.`s38`.`b` AS `b`,`test`.`s39`.`a` AS `a`,`test`.`s39`.`b` AS `b`,`test`.`s40`.`a` AS `a`,`test`.`s40`.`b` AS `b`,`test`.`s41`.`a` AS `a`,`test`.`s41`.`b` AS `b`,`test`.`s42`.`a` AS `a`,`test`.`s42`.`b` AS `b`,`test`.`s43`.`a` AS `a`,`test`.`s43`.`b` AS `b`,`test`.`s44`.`a` AS `a`,`test`.`s44`.`b` AS `b`,`test`.`s45`.`a` AS `a`,`test`.`s45`.`b` AS `b`,`test`.`s46`.`a` AS `a`,`test`.`s46`.`b` AS `b`,`test`.`s47`.`a` AS `a`,`test`.`s47`.`b` AS `b`,`test`.`s48`.`a` AS `a`,`test`.`s48`.`b` AS `b`,`test`.`s49`.`a` AS `a`,`test`.`s49`.`b` AS `b` from `test`.`t1` `s00` join `test`.`t1` `s01` join `test`.`t1` `s02` join `test`.`t1` `s03` join `test`.`t1` `s04` join `test`.`t1` `s05` join `test`.`t1` `s06` join `test`.`t1` `s07` join `test`.`t1` `s08` join `test`.`t1` `s09` join `test`.`t1` `s10` join `test`.`t1` `s11` join `test`.`t1` `s12` join `test`.`t1` `s13` join `test`.`t1` `s14` join `test`.`t1` `s15` join `test`.`t1` `s16` join `test`.`t1` `s17` join `test`.`t1` `s18` join `test`.`t1` `s19` join `test`.`t1` `s20` join `test`.`t1` `s21` join `test`.`t1` `s22` join `test`.`t1` `s23` join `test`.`t1` `s24` join `test`.`t1` `s25` join `test`.`t1` `s26` join `test`.`t1` `s27` join `test`.`t1` `s28` join `test`.`t1` `s29` join `test`.`t1` `s30` join `test`.`t1` `s31` join `test`.`t1` `s32` join `test`.`t1` `s33` join `test`.`t1` `s34` join `test`.`t1` `s35` join `test`.`t1` `s36` join `test`.`t1` `s37` join `test`.`t1` `s38` join `test`.`t1` `s39` join `test`.`t1` `s40` join `test`.`t1` `s41` join `test`.`t1` `s42` join `test`.`t1` `s43` join `test`.`t1` `s44` join `test`.`t1` `s45` join `test`.`t1` `s46` join `test`.`t1` `s47` join `test`.`t1` `s48` join `test`.`t1` `s49` where <in_optimizer>(`test`.`s00`.`a`,<exists>(/* select#2 */ select 1 from `test`.`t1` `m00` join `test`.`t1` `m01` join `test`.`t1` `m02` join `test`.`t1` `m03` join `test`.`t1` `m04` join `test`.`t1` `m05` join `test`.`t1` `m06` join `test`.`t1` `m07` join `test`.`t1` `m08` join `test`.`t1` `m09` join `test`.`t1` `m10` join `test`.`t1` `m11` join `test`.`t1` `m12` join `test`.`t1` `m13` join `test`.`t1` `m14` join `test`.`t1` `m15` join `test`.`t1` `m16` join `test`.`t1` `m17` join `test`.`t1` `m18` join `test`.`t1` `m19` where (<cache>(`test`.`s00`.`a`) = `test`.`m00`.`a`)))
|
|
select * from
|
|
t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10))
|
|
where t1.a < 5;
|
|
a b a b
|
|
0 0 0 0
|
|
1 1 1 1
|
|
2 2 2 2
|
|
prepare s1 from
|
|
' select * from
|
|
t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10))
|
|
where t1.a < 5';
|
|
execute s1;
|
|
a b a b
|
|
0 0 0 0
|
|
1 1 1 1
|
|
2 2 2 2
|
|
execute s1;
|
|
a b a b
|
|
0 0 0 0
|
|
1 1 1 1
|
|
2 2 2 2
|
|
insert into t1 select (A.a + 10 * B.a),1 from t0 A, t0 B;
|
|
explain select * from t1 where a in (select pk from t10 where pk<3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t10 NULL range PRIMARY PRIMARY 4 NULL 4 100.00 Using where; Using index
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 103 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t10` join `test`.`t1` where ((`test`.`t1`.`a` = `test`.`t10`.`pk`) and (`test`.`t10`.`pk` < 3))
|
|
drop table t0, t1, t2;
|
|
drop table t10, t11, t12;
|
|
#
|
|
# Check that subqueries with outer joins or straight_join work for
|
|
# different permutations of const and non-const tables. (Ref. Bug#46692)
|
|
#
|
|
CREATE TABLE t1 (i INTEGER);
|
|
CREATE TABLE t2 (i INTEGER);
|
|
CREATE TABLE t3 (i INTEGER);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 0 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 0 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 0 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 1 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 1 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 1 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 2 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 2 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
0 2 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(NULL, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((NULL <> 0) and multiple equal(11, `test`.`t3`.`i`, `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select NULL AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where multiple equal(11, `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (0);
|
|
DELETE FROM t2;
|
|
INSERT INTO t1 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 0 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 0 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 0 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 1 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 1 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 1 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 2 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 2 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = '2') and (`test`.`t2`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
1 2 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = '2') and (`test`.`t3`.`i` = '2'))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = '2')
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and ('2' <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '2' AS `i` from <constant table> semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (0);
|
|
DELETE FROM t2;
|
|
INSERT INTO t1 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 0 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 0 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 0 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
1
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 1 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = `test`.`t3`.`i`) and (`test`.`t1`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = `test`.`t3`.`i`) and (`test`.`t1`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = `test`.`t3`.`i`) and (`test`.`t1`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 1 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 1 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
1
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
1
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 2 0
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t3`.`i`) and (`test`.`t2`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t3`.`i`) and (`test`.`t2`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t3`.`i`) and (`test`.`t2`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
EXECUTE stmt;
|
|
i
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 0 0.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 2 1
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t3`.`i`) and (`test`.`t2`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t3`.`i`) and (`test`.`t2`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t3`.`i`) and (`test`.`t2`.`i` = `test`.`t3`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t3`.`i` = 11) and (`test`.`t2`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (1);
|
|
SELECT (SELECT COUNT(*) from t1) AS c1,
|
|
(SELECT COUNT(*) from t2) AS c2,
|
|
(SELECT COUNT(*) from t3) AS c3;
|
|
c1 c2 c3
|
|
2 2 2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
1
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
1
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
1
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE EXISTS
|
|
(SELECT * FROM t2 LEFT JOIN t3 ON t2.i=t3.i
|
|
WHERE t1.i = t3.i);
|
|
i
|
|
1
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t3`.`i` = `test`.`t2`.`i`))
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
1
|
|
2
|
|
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
|
|
EXECUTE stmt;
|
|
i
|
|
1
|
|
2
|
|
EXECUTE stmt;
|
|
i
|
|
1
|
|
2
|
|
DEALLOCATE PREPARE stmt;
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
1
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
1
|
|
2
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.i' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`i` = 11) and (`test`.`t3`.`i` = 11) and (`test`.`t1`.`i` <> 0))
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i <> 0);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
EXPLAIN SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` straight_join `test`.`t3`) where (`test`.`t3`.`i` = 11)
|
|
SELECT * FROM t1 WHERE (11) IN
|
|
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
|
|
i
|
|
INSERT INTO t3 VALUES (0);
|
|
DELETE FROM t3;
|
|
INSERT INTO t2 VALUES (0);
|
|
DELETE FROM t2;
|
|
INSERT INTO t1 VALUES (0);
|
|
DROP TABLE t1, t2, t3;
|
|
create table x1(k int primary key, d1 int, d2 int);
|
|
create table x2(k int primary key, d1 int, d2 int);
|
|
insert into x1 values
|
|
(10, 10, 10),
|
|
(20, 20, 20),
|
|
(21, 20, null),
|
|
(30, null, 30),
|
|
(40, 40, 40);
|
|
insert into x2 values
|
|
(10, 10, 10),
|
|
(20, 20, 20),
|
|
(21, 20, null),
|
|
(30, null, 30);
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2);
|
|
k d1 d2
|
|
10 10 10
|
|
20 20 20
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2) is true;
|
|
k d1 d2
|
|
10 10 10
|
|
20 20 20
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2) is false;
|
|
k d1 d2
|
|
40 40 40
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2) is unknown;
|
|
k d1 d2
|
|
21 20 NULL
|
|
30 NULL 30
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2);
|
|
k d1 d2
|
|
10 10 10
|
|
20 20 20
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2) is true;
|
|
k d1 d2
|
|
10 10 10
|
|
20 20 20
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2) is false;
|
|
k d1 d2
|
|
21 20 NULL
|
|
40 40 40
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2) is unknown;
|
|
k d1 d2
|
|
30 NULL 30
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2);
|
|
k d1 d2
|
|
10 10 10
|
|
20 20 20
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2) is true;
|
|
k d1 d2
|
|
10 10 10
|
|
20 20 20
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2) is false;
|
|
k d1 d2
|
|
21 20 NULL
|
|
30 NULL 30
|
|
40 40 40
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2) is unknown;
|
|
k d1 d2
|
|
select *
|
|
from x1
|
|
where exists (select *
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2);
|
|
k d1 d2
|
|
10 10 10
|
|
20 20 20
|
|
drop table x1;
|
|
drop table x2;
|
|
CREATE TABLE t1 (
|
|
a int(11) NOT NULL,
|
|
b int(11) NOT NULL,
|
|
c datetime default NULL,
|
|
PRIMARY KEY (a),
|
|
KEY idx_bc (b,c)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES
|
|
(406989,67,'2006-02-23 17:08:46'), (150078,67,'2005-10-26 11:17:45'),
|
|
(406993,67,'2006-02-27 11:20:57'), (245655,67,'2005-12-08 15:59:08'),
|
|
(406994,67,'2006-02-27 11:26:46'), (256,67,NULL),
|
|
(398341,67,'2006-02-20 04:48:44'), (254,67,NULL),(1120,67,NULL),
|
|
(406988,67,'2006-02-23 17:07:22'), (255,67,NULL),
|
|
(398340,67,'2006-02-20 04:38:53'),(406631,67,'2006-02-23 10:49:42'),
|
|
(245653,67,'2005-12-08 15:59:07'),(406992,67,'2006-02-24 16:47:18'),
|
|
(245654,67,'2005-12-08 15:59:08'),(406995,67,'2006-02-28 11:55:00'),
|
|
(127261,67,'2005-10-13 12:17:58'),(406991,67,'2006-02-24 16:42:32'),
|
|
(245652,67,'2005-12-08 15:58:27'),(398545,67,'2006-02-20 04:53:13'),
|
|
(154504,67,'2005-10-28 11:53:01'),(9199,67,NULL),(1,67,'2006-02-23 15:01:35'),
|
|
(223456,67,NULL),(4101,67,NULL),(1133,67,NULL),
|
|
(406990,67,'2006-02-23 18:01:45'),(148815,67,'2005-10-25 15:34:17'),
|
|
(148812,67,'2005-10-25 15:30:01'),(245651,67,'2005-12-08 15:58:27'),
|
|
(154503,67,'2005-10-28 11:52:38');
|
|
create table t11 select * from t1 where b = 67 AND (c IS NULL OR c > NOW()) order by 3 asc;
|
|
create table t12 select * from t1 where b = 67 AND (c IS NULL OR c > NOW()) order by 3 desc;
|
|
create table t21 select * from t1 where b = 67 AND (c IS NULL OR c > '2005-12-08') order by 3 asc;
|
|
create table t22 select * from t1 where b = 67 AND (c IS NULL OR c > '2005-12-08') order by 3 desc;
|
|
update t22 set c = '2005-12-08 15:58:27' where a = 255;
|
|
explain select t21.* from t21,t22 where t21.a = t22.a and
|
|
t22.a in (select t12.a from t11, t12 where t11.a in(255,256) and t11.a = t12.a and t11.c is null) and t22.c is null order by t21.a;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t11 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; Using temporary; Using filesort; Start temporary
|
|
1 SIMPLE t12 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t22 NULL ALL NULL NULL NULL NULL 26 3.85 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t21 NULL ALL NULL NULL NULL NULL 26 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t21`.`a` AS `a`,`test`.`t21`.`b` AS `b`,`test`.`t21`.`c` AS `c` from `test`.`t21` join `test`.`t22` semi join (`test`.`t11` join `test`.`t12`) where ((`test`.`t12`.`a` = `test`.`t11`.`a`) and (`test`.`t22`.`a` = `test`.`t11`.`a`) and (`test`.`t21`.`a` = `test`.`t11`.`a`) and (`test`.`t22`.`c` is null) and (`test`.`t11`.`a` in (255,256)) and (`test`.`t11`.`c` is null)) order by `test`.`t21`.`a`
|
|
explain format=json select * from t1 where a in (select a from t11);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "6.71"
|
|
},
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "t11",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 8,
|
|
"rows_produced_per_join": 8,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "0.80",
|
|
"prefix_cost": "1.31",
|
|
"data_read_per_join": "128"
|
|
},
|
|
"used_columns": [
|
|
"a"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t1",
|
|
"access_type": "eq_ref",
|
|
"possible_keys": [
|
|
"PRIMARY"
|
|
],
|
|
"key": "PRIMARY",
|
|
"used_key_parts": [
|
|
"a"
|
|
],
|
|
"key_length": "4",
|
|
"ref": [
|
|
"test.t11.a"
|
|
],
|
|
"rows_examined_per_scan": 1,
|
|
"rows_produced_per_join": 8,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "2.00",
|
|
"eval_cost": "0.80",
|
|
"prefix_cost": "6.71",
|
|
"data_read_per_join": "128"
|
|
},
|
|
"used_columns": [
|
|
"a",
|
|
"b",
|
|
"c"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` semi join (`test`.`t11`) where (`test`.`t1`.`a` = `test`.`t11`.`a`)
|
|
select t21.* from t21,t22 where t21.a = t22.a and
|
|
t22.a in (select t12.a from t11, t12 where t11.a in(255,256) and t11.a = t12.a and t11.c is null) and t22.c is null order by t21.a;
|
|
a b c
|
|
256 67 NULL
|
|
drop table t1, t11, t12, t21, t22;
|
|
create table t1(a int);
|
|
insert into t1 values (0),(1);
|
|
explain
|
|
select (select max(y.a) from t1 y where a in (select a from t1 z) and a < x.a) as subq from t1 x;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY x NULL ALL NULL NULL NULL NULL 2 100.00 NULL
|
|
2 DEPENDENT SUBQUERY y NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
2 DEPENDENT SUBQUERY z NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.x.a' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select (/* select#2 */ select max(`test`.`y`.`a`) from `test`.`t1` `y` semi join (`test`.`t1` `z`) where ((`test`.`z`.`a` = `test`.`y`.`a`) and (`test`.`y`.`a` < `test`.`x`.`a`))) AS `subq` from `test`.`t1` `x`
|
|
select (select max(y.a) from t1 y where a in (select a from t1 z) and a < x.a) as subq from t1 x;
|
|
subq
|
|
NULL
|
|
0
|
|
drop table t1;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 as select * from t0;
|
|
insert into t1 select a+10 from t0;
|
|
insert into t0 values(2);
|
|
explain select * from t1 where 2 in (select a from t0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 11 10.00 Using where; Start temporary; End temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` semi join (`test`.`t0`) where (`test`.`t0`.`a` = 2)
|
|
select * from t1 where 2 in (select a from t0);
|
|
a
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
explain select * from (select a from t0) x where a in (select a from t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 100.00 Start temporary
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 11 10.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`a` AS `a` from `test`.`t0` semi join (`test`.`t1`) where (`test`.`t0`.`a` = `test`.`t1`.`a`)
|
|
explain format=json select * from (select a from t0) x where a in (select a from t1);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "28.32"
|
|
},
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "t1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 20,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "2.00",
|
|
"prefix_cost": "2.51",
|
|
"data_read_per_join": "160"
|
|
},
|
|
"used_columns": [
|
|
"a"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t0",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 11,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "10.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.50",
|
|
"eval_cost": "0.11",
|
|
"prefix_cost": "28.32",
|
|
"data_read_per_join": "8"
|
|
},
|
|
"used_columns": [
|
|
"a"
|
|
],
|
|
"attached_condition": "(`test`.`t0`.`a` = `test`.`t1`.`a`)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`a` AS `a` from `test`.`t0` semi join (`test`.`t1`) where (`test`.`t0`.`a` = `test`.`t1`.`a`)
|
|
drop table t0, t1;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 (kp1 int, kp2 int, c int, filler char(100), key(kp1, kp2));
|
|
insert into t1 select A.a+10*(B.a+10*C.a), 0, 0, 'filler' from t0 A, t0 B, t0 C;
|
|
insert into t1 select * from t1 where kp1 < 20;
|
|
create table t3 (a int);
|
|
insert into t3 select A.a + 10*B.a from t0 A, t0 B;
|
|
explain select * from t3 where a in (select kp1 from t1 where kp1<20);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL range kp1 kp1 5 NULL 48 100.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 100 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t3`.`a` AS `a` from `test`.`t3` semi join (`test`.`t1`) where ((`test`.`t3`.`a` = `test`.`t1`.`kp1`) and (`test`.`t1`.`kp1` < 20))
|
|
select * from t3 where a in (select kp1 from t1 where kp1<20);
|
|
a
|
|
0
|
|
1
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
explain select * from t3 where a in (select kp1 from t1 where kp1<20) and a<20;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL range kp1 kp1 5 NULL 48 100.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 100 3.33 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t3`.`a` AS `a` from `test`.`t3` semi join (`test`.`t1`) where ((`test`.`t3`.`a` = `test`.`t1`.`kp1`) and (`test`.`t1`.`kp1` < 20) and (`test`.`t1`.`kp1` < 20))
|
|
select * from t3 where a in (select kp1 from t1 where kp1<20) and a<20;
|
|
a
|
|
0
|
|
1
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
create table t4 (pk int primary key);
|
|
insert into t4 select a from t3;
|
|
explain select * from t3 where a in
|
|
(select t1.kp1 from t1,t4 where kp1<20 and t4.pk=t1.c);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL range kp1 kp1 5 NULL 48 100.00 Using where; LooseScan
|
|
1 SIMPLE t4 NULL eq_ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Using index; FirstMatch(t1)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 100 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t3`.`a` AS `a` from `test`.`t3` semi join (`test`.`t1` join `test`.`t4`) where ((`test`.`t3`.`a` = `test`.`t1`.`kp1`) and (`test`.`t4`.`pk` = `test`.`t1`.`c`) and (`test`.`t1`.`kp1` < 20))
|
|
explain format=tree select * from t3 where a in
|
|
(select t1.kp1 from t1,t4 where kp1<20 and t4.pk=t1.c);
|
|
EXPLAIN
|
|
-> Inner hash join (t3.a = t1.kp1) (cost=519.20 rows=480)
|
|
-> Table scan on t3 (cost=1.54 rows=100)
|
|
-> Hash
|
|
-> Nested loop semijoin with duplicate removal on kp1 (cost=38.66 rows=48)
|
|
-> Filter: ((t1.kp1 < 20) and (t1.c is not null)) (cost=21.86 rows=48)
|
|
-> Index range scan on t1 using kp1 (cost=21.86 rows=48)
|
|
-> Single-row index lookup on t4 using PRIMARY (pk=t1.c) (cost=0.25 rows=1)
|
|
|
|
select * from t3 where a in
|
|
(select t1.kp1 from t1,t4 where kp1<20 and t4.pk=t1.c);
|
|
a
|
|
0
|
|
1
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
drop table t1, t3, t4;
|
|
create table t1 (a int);
|
|
insert into t1 values (0),(0),(0),(1),(1),(1),(2),(2),(2),(3),(3),(3);
|
|
set session internal_tmp_mem_storage_engine='memory';
|
|
set @save_max_heap_table_size=@@max_heap_table_size;
|
|
set @@max_heap_table_size= 16384;
|
|
# Attempt to make one test that overflows the heap table when a
|
|
# non-duplicate row is inserted and one test that overflows the
|
|
# heap table when a duplicate record is inserted. Debugging showed
|
|
# that these situations occurred with max_heap_table_size=16384
|
|
# and optimizer_join_cache_level equals 1 and 0, respectively.
|
|
# Finally execute a test that does not overflow the heap table.
|
|
explain
|
|
select count(*) from t0 a, t0 b, t0 c
|
|
where c.a in (select a from t1 d);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE d NULL ALL NULL NULL NULL NULL 12 100.00 Start temporary
|
|
1 SIMPLE c NULL ALL NULL NULL NULL NULL 10 10.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE a NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE b NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select count(0) AS `count(*)` from `test`.`t0` `a` join `test`.`t0` `b` join `test`.`t0` `c` semi join (`test`.`t1` `d`) where (`test`.`c`.`a` = `test`.`d`.`a`)
|
|
flush status;
|
|
select count(*) from t0 a, t0 b, t0 c
|
|
where c.a in (select a from t1 d);
|
|
count(*)
|
|
400
|
|
show status like 'Created_tmp_disk_tables';
|
|
Variable_name Value
|
|
Created_tmp_disk_tables 0
|
|
set @@max_heap_table_size= @save_max_heap_table_size;
|
|
set session internal_tmp_mem_storage_engine=default;
|
|
flush status;
|
|
select count(*) from t0 a, t0 b, t0 c
|
|
where c.a in (select a from t1 d);
|
|
count(*)
|
|
400
|
|
show status like 'Created_tmp_disk_tables';
|
|
Variable_name Value
|
|
Created_tmp_disk_tables 0
|
|
drop table t0, t1;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t2(a int);
|
|
insert into t2 values (1),(2);
|
|
create table t3 ( a int , filler char(100), key(a));
|
|
insert into t3 select A.a + 10*B.a, 'filler' from t0 A, t0 B;
|
|
explain select * from t3 where a in (select a from t2) and (a > 5 or a < 10);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ref a a 5 test.t2.a 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t3`.`a` AS `a`,`test`.`t3`.`filler` AS `filler` from `test`.`t3` semi join (`test`.`t2`) where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and ((`test`.`t2`.`a` > 5) or (`test`.`t2`.`a` < 10)))
|
|
select * from t3 where a in (select a from t2);
|
|
a filler
|
|
1 filler
|
|
2 filler
|
|
drop table t0, t2, t3;
|
|
create table t1 (a date);
|
|
insert into t1 values ('2008-01-01'),('2008-01-01'),('2008-02-01'),('2008-02-01');
|
|
create table t2 (a int);
|
|
insert into t2 values (1),(2);
|
|
create table t3 (a char(10));
|
|
insert into t3 select * from t1;
|
|
insert into t3 values (1),(2);
|
|
explain select * from t2 where a in (select a from t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where (cast(`test`.`t2`.`a` as double) = cast(`test`.`t1`.`a` as double))
|
|
explain select * from t2 where a in (select a from t2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t2`) where (`test`.`t2`.`a` = `test`.`t2`.`a`)
|
|
explain select * from t2 where a in (select a from t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t3`) where (`test`.`t2`.`a` = `test`.`t3`.`a`)
|
|
explain select * from t1 where a in (select a from t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` semi join (`test`.`t3`) where (`test`.`t1`.`a` = `test`.`t3`.`a`)
|
|
drop table t1, t2, t3;
|
|
create table t1 (a decimal);
|
|
insert into t1 values (1),(2);
|
|
explain select * from t1 where a in (select a from t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` semi join (`test`.`t1`) where (`test`.`t1`.`a` = `test`.`t1`.`a`)
|
|
drop table t1;
|
|
create table t1 (a int);
|
|
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t2 as select * from t1;
|
|
create table t3 (a int, b int, filler char(100), key(a)) charset utf8mb4;
|
|
insert into t3 select A.a + 10*B.a, A.a + 10*B.a, 'filler' from t1 A, t1 B, t1 C;
|
|
explain select * from t1, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30) and t1.a =3;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 10 10.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 10 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ref a a 5 test.t2.a 10 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`filler` AS `filler` from `test`.`t1` join `test`.`t3` semi join (`test`.`t2`) where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`a` = 3) and ((`test`.`t2`.`a` < 10) or (`test`.`t2`.`a` > 30)))
|
|
explain format=json select * from t1, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30) and t1.a =3;
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "59.01"
|
|
},
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "t1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 10,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "10.00",
|
|
"cost_info": {
|
|
"read_cost": "1.40",
|
|
"eval_cost": "0.10",
|
|
"prefix_cost": "1.50",
|
|
"data_read_per_join": "8"
|
|
},
|
|
"used_columns": [
|
|
"a"
|
|
],
|
|
"attached_condition": "(`test`.`t1`.`a` = 3)"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t2",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 10,
|
|
"rows_produced_per_join": 10,
|
|
"filtered": "100.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.50",
|
|
"eval_cost": "1.00",
|
|
"prefix_cost": "3.01",
|
|
"data_read_per_join": "80"
|
|
},
|
|
"used_columns": [
|
|
"a"
|
|
],
|
|
"attached_condition": "(((`test`.`t2`.`a` < 10) or (`test`.`t2`.`a` > 30)) and (`test`.`t2`.`a` is not null))"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t3",
|
|
"access_type": "ref",
|
|
"possible_keys": [
|
|
"a"
|
|
],
|
|
"key": "a",
|
|
"used_key_parts": [
|
|
"a"
|
|
],
|
|
"key_length": "5",
|
|
"ref": [
|
|
"test.t2.a"
|
|
],
|
|
"rows_examined_per_scan": 10,
|
|
"rows_produced_per_join": 100,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "25.00",
|
|
"eval_cost": "10.00",
|
|
"prefix_cost": "59.01",
|
|
"data_read_per_join": "40K"
|
|
},
|
|
"used_columns": [
|
|
"a",
|
|
"b",
|
|
"filler"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`filler` AS `filler` from `test`.`t1` join `test`.`t3` semi join (`test`.`t2`) where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`a` = 3) and ((`test`.`t2`.`a` < 10) or (`test`.`t2`.`a` > 30)))
|
|
explain select straight_join * from t1 a, t1 b where a.a in (select a from t2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY a NULL ALL NULL NULL NULL NULL 10 100.00 Using where
|
|
1 PRIMARY b NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY t2 NULL ALL NULL NULL NULL NULL 10 10.00 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select straight_join `test`.`a`.`a` AS `a`,`test`.`b`.`a` AS `a` from `test`.`t1` `a` join `test`.`t1` `b` where <in_optimizer>(`test`.`a`.`a`,<exists>(/* select#2 */ select 1 from `test`.`t2` where (<cache>(`test`.`a`.`a`) = `test`.`t2`.`a`)))
|
|
explain select * from t2 where a in (select straight_join a.a from t1 a, t1 b);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t2 NULL ALL NULL NULL NULL NULL 10 100.00 Using where
|
|
2 DEPENDENT SUBQUERY a NULL ALL NULL NULL NULL NULL 10 10.00 Using where
|
|
2 DEPENDENT SUBQUERY b NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(/* select#2 */ select straight_join 1 from `test`.`t1` `a` join `test`.`t1` `b` where (<cache>(`test`.`t2`.`a`) = `test`.`a`.`a`)))
|
|
explain select * from t2 where a in (select straight_join a.a from t1 a, t1 b);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t2 NULL ALL NULL NULL NULL NULL 10 100.00 Using where
|
|
2 DEPENDENT SUBQUERY a NULL ALL NULL NULL NULL NULL 10 10.00 Using where
|
|
2 DEPENDENT SUBQUERY b NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(/* select#2 */ select straight_join 1 from `test`.`t1` `a` join `test`.`t1` `b` where (<cache>(`test`.`t2`.`a`) = `test`.`a`.`a`)))
|
|
explain select straight_join * from t2 x, t2 y
|
|
where x.a in (select straight_join a.a from t1 a, t1 b);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY x NULL ALL NULL NULL NULL NULL 10 100.00 Using where
|
|
1 PRIMARY y NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY a NULL ALL NULL NULL NULL NULL 10 10.00 Using where
|
|
2 DEPENDENT SUBQUERY b NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select straight_join `test`.`x`.`a` AS `a`,`test`.`y`.`a` AS `a` from `test`.`t2` `x` join `test`.`t2` `y` where <in_optimizer>(`test`.`x`.`a`,<exists>(/* select#2 */ select straight_join 1 from `test`.`t1` `a` join `test`.`t1` `b` where (<cache>(`test`.`x`.`a`) = `test`.`a`.`a`)))
|
|
create table t0 (a int, b int);
|
|
insert into t0 values(1,1);
|
|
explain select * from t0, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t0 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 10 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ref a a 5 test.t2.a 10 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '1' AS `a`,'1' AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`filler` AS `filler` from `test`.`t3` semi join (`test`.`t2`) where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and ((`test`.`t2`.`a` < 10) or (`test`.`t2`.`a` > 30)))
|
|
create table t4 as select a as x, a as y from t1;
|
|
explain select * from t0, t3 where (t3.a, t3.b) in (select x,y from t4) and (t3.a < 10 or t3.a >30);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t0 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 10 100.00 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ref a a 5 test.t4.x 10 10.00 Using where; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '1' AS `a`,'1' AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t3`.`filler` AS `filler` from `test`.`t3` semi join (`test`.`t4`) where ((`test`.`t3`.`b` = `test`.`t4`.`y`) and (`test`.`t3`.`a` = `test`.`t4`.`x`) and ((`test`.`t4`.`x` < 10) or (`test`.`t4`.`x` > 30)))
|
|
drop table t0,t1,t2,t3,t4;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 (a int, b int, filler char(100), key(a,b));
|
|
insert into t1 select A.a, B.a, 'filler' from t0 A, t0 B;
|
|
create table t2 as select * from t1;
|
|
explain select * from t2 where a in (select b from t1 where a=3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ref a a 5 const 8 100.00 Using index; LooseScan
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 100 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`filler` AS `filler` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` = 3))
|
|
explain select * from t2 where (b,a) in (select a,b from t1 where a=3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ref a a 5 const 8 100.00 Using index; LooseScan
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 100 1.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`filler` AS `filler` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` = 3) and (`test`.`t2`.`b` = 3))
|
|
drop table t1,t2;
|
|
create table t1 (a int, b int);
|
|
insert into t1 select a,a from t0;
|
|
create table t2 (a int, b int);
|
|
insert into t2 select A.a + 10*B.a, A.a + 10*B.a from t0 A, t0 B;
|
|
explain select * from t1 where (a,b) in (select a,b from t2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 10 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 100 1.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`))
|
|
drop table t0, t1, t2;
|
|
#
|
|
# Bug#19695490: CRASH IN CREATE_REF_FOR_KEY ON SELECT + JOIN + UTF8 COLUMN
|
|
# + DATETIME INDEX.
|
|
#
|
|
CREATE TABLE t1 (
|
|
field1 varchar(255) CHARACTER SET utf8,
|
|
field2 varchar(255) CHARACTER SET utf8
|
|
);
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
INSERT INTO t1 VALUES
|
|
('time','time'),
|
|
('lpjdzvkp','lpjdzvkp'),
|
|
('dzvkpai', 'dzvkpai');
|
|
CREATE TABLE t2 ( col_varchar varchar(10));
|
|
CREATE TABLE t3 (
|
|
pk int(11) NOT NULL,
|
|
col_varchar_255_utf8_key varchar(255) CHARACTER SET utf8,
|
|
col_varchar_10_utf8_key varchar(10) CHARACTER SET utf8,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
INSERT INTO t3 VALUES (22,'come','h'),
|
|
(23,'time','aaa'),
|
|
(24,'lpjdzvkp','ababa'),
|
|
(25,'d','GGDD');
|
|
SELECT * FROM t1 WHERE (field1, field2) IN (
|
|
SELECT table1.col_varchar_255_utf8_key AS field1,
|
|
table1.col_varchar_255_utf8_key AS field2
|
|
FROM t3 AS table1 LEFT JOIN t2 AS table2
|
|
ON table1.col_varchar_10_utf8_key <=
|
|
table2.col_varchar
|
|
WHERE table1.pk >= 6);
|
|
field1 field2
|
|
time time
|
|
lpjdzvkp lpjdzvkp
|
|
DROP TABLE t1,t2,t3;
|
|
create table t0 (a decimal(4,2));
|
|
insert into t0 values (10.24), (22.11);
|
|
create table t1 as select * from t0;
|
|
insert into t1 select * from t0;
|
|
explain select * from t0 where a in (select a from t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`a` AS `a` from `test`.`t0` semi join (`test`.`t1`) where (`test`.`t1`.`a` = `test`.`t0`.`a`)
|
|
select * from t0 where a in (select a from t1);
|
|
a
|
|
10.24
|
|
22.11
|
|
drop table t0, t1;
|
|
create table t0(a date);
|
|
insert into t0 values ('2008-01-01'),('2008-02-02');
|
|
create table t1 as select * from t0;
|
|
insert into t1 select * from t0;
|
|
explain select * from t0 where a in (select a from t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`a` AS `a` from `test`.`t0` semi join (`test`.`t1`) where (`test`.`t1`.`a` = `test`.`t0`.`a`)
|
|
select * from t0 where a in (select a from t1);
|
|
a
|
|
2008-01-01
|
|
2008-02-02
|
|
drop table t0, t1;
|
|
create table t0(a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 as select a as a, a as b, a as c from t0 where a < 3;
|
|
create table t2 as select a as a, a as b from t0 where a < 3;
|
|
insert into t2 select * from t2;
|
|
explain select * from t1 where (a,b,c) in (select x.a, y.a, z.a from t2 x, t2 y, t2 z where x.b=33);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE x NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE y NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE z NULL ALL NULL NULL NULL NULL 6 16.67 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` semi join (`test`.`t2` `x` join `test`.`t2` `y` join `test`.`t2` `z`) where ((`test`.`z`.`a` = `test`.`t1`.`c`) and (`test`.`y`.`a` = `test`.`t1`.`b`) and (`test`.`t1`.`a` = `test`.`x`.`a`) and (`test`.`x`.`b` = 33))
|
|
drop table t0,t1,t2;
|
|
set @save_join_buffer_size = @@join_buffer_size;
|
|
set join_buffer_size= 8192;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 (a int, filler1 binary(200), filler2 binary(200));
|
|
insert into t1 select a, 'filler123456', 'filler123456' from t0;
|
|
insert into t1 select a+10, 'filler123456', 'filler123456' from t0;
|
|
create table t2 as select * from t1;
|
|
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
|
|
insert into t1 values (2, 'duplicate ok', 'duplicate ok');
|
|
insert into t1 values (18, 'duplicate ok', 'duplicate ok');
|
|
insert into t2 values (3, 'duplicate ok', 'duplicate ok');
|
|
insert into t2 values (19, 'duplicate ok', 'duplicate ok');
|
|
explain select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2) as z
|
|
from t1 ot where a in (select a from t2 it);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it NULL ALL NULL NULL NULL NULL 22 100.00 Start temporary
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 32 10.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`a` AS `a`,substr(`test`.`ot`.`filler1`,1,10) AS `mid(filler1, 1,10)`,(length(`test`.`ot`.`filler1`) = length(`test`.`ot`.`filler2`)) AS `z` from `test`.`t1` `ot` semi join (`test`.`t2` `it`) where (`test`.`ot`.`a` = `test`.`it`.`a`)
|
|
select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2) as z
|
|
from t1 ot where a in (select a from t2 it);
|
|
a mid(filler1, 1,10) z
|
|
0 filler1234 1
|
|
1 filler1234 1
|
|
10 filler1234 1
|
|
11 filler1234 1
|
|
12 filler1234 1
|
|
13 filler1234 1
|
|
14 filler1234 1
|
|
15 filler1234 1
|
|
16 filler1234 1
|
|
17 filler1234 1
|
|
18 duplicate 1
|
|
18 filler1234 1
|
|
19 filler1234 1
|
|
2 duplicate 1
|
|
2 filler1234 1
|
|
3 filler1234 1
|
|
4 filler1234 1
|
|
5 filler1234 1
|
|
6 filler1234 1
|
|
7 filler1234 1
|
|
8 filler1234 1
|
|
9 filler1234 1
|
|
explain select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
|
from t2 ot where a in (select a from t1 it);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it NULL ALL NULL NULL NULL NULL 32 100.00 Start temporary
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 22 10.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`a` AS `a`,substr(`test`.`ot`.`filler1`,1,10) AS `mid(filler1, 1,10)`,(length(`test`.`ot`.`filler1`) = length(`test`.`ot`.`filler2`)) AS `length(filler1)=length(filler2)` from `test`.`t2` `ot` semi join (`test`.`t1` `it`) where (`test`.`ot`.`a` = `test`.`it`.`a`)
|
|
select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
|
from t2 ot where a in (select a from t1 it);
|
|
a mid(filler1, 1,10) length(filler1)=length(filler2)
|
|
0 filler1234 1
|
|
1 filler1234 1
|
|
10 filler1234 1
|
|
11 filler1234 1
|
|
12 filler1234 1
|
|
13 filler1234 1
|
|
14 filler1234 1
|
|
15 filler1234 1
|
|
16 filler1234 1
|
|
17 filler1234 1
|
|
18 filler1234 1
|
|
19 duplicate 1
|
|
19 filler1234 1
|
|
2 filler1234 1
|
|
3 duplicate 1
|
|
3 filler1234 1
|
|
4 filler1234 1
|
|
5 filler1234 1
|
|
6 filler1234 1
|
|
7 filler1234 1
|
|
8 filler1234 1
|
|
9 filler1234 1
|
|
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
|
|
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
|
|
explain select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2) as z
|
|
from t1 ot where a in (select a from t2 it);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it NULL ALL NULL NULL NULL NULL 22 100.00 Start temporary
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 52 10.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`a` AS `a`,substr(`test`.`ot`.`filler1`,1,10) AS `mid(filler1, 1,10)`,(length(`test`.`ot`.`filler1`) = length(`test`.`ot`.`filler2`)) AS `z` from `test`.`t1` `ot` semi join (`test`.`t2` `it`) where (`test`.`ot`.`a` = `test`.`it`.`a`)
|
|
select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2) as z
|
|
from t1 ot where a in (select a from t2 it);
|
|
a mid(filler1, 1,10) z
|
|
0 filler1234 1
|
|
1 filler1234 1
|
|
10 filler1234 1
|
|
11 filler1234 1
|
|
12 filler1234 1
|
|
13 filler1234 1
|
|
14 filler1234 1
|
|
15 filler1234 1
|
|
16 filler1234 1
|
|
17 filler1234 1
|
|
18 duplicate 1
|
|
18 filler1234 1
|
|
19 filler1234 1
|
|
2 duplicate 1
|
|
2 filler1234 1
|
|
3 filler1234 1
|
|
4 filler1234 1
|
|
5 filler1234 1
|
|
6 filler1234 1
|
|
7 filler1234 1
|
|
8 filler1234 1
|
|
9 filler1234 1
|
|
explain select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
|
from t2 ot where a in (select a from t1 it);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it NULL ALL NULL NULL NULL NULL 52 100.00 Start temporary
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 22 10.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`a` AS `a`,substr(`test`.`ot`.`filler1`,1,10) AS `mid(filler1, 1,10)`,(length(`test`.`ot`.`filler1`) = length(`test`.`ot`.`filler2`)) AS `length(filler1)=length(filler2)` from `test`.`t2` `ot` semi join (`test`.`t1` `it`) where (`test`.`ot`.`a` = `test`.`it`.`a`)
|
|
select
|
|
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
|
from t2 ot where a in (select a from t1 it);
|
|
a mid(filler1, 1,10) length(filler1)=length(filler2)
|
|
0 filler1234 1
|
|
1 filler1234 1
|
|
10 filler1234 1
|
|
11 filler1234 1
|
|
12 filler1234 1
|
|
13 filler1234 1
|
|
14 filler1234 1
|
|
15 filler1234 1
|
|
16 filler1234 1
|
|
17 filler1234 1
|
|
18 filler1234 1
|
|
19 duplicate 1
|
|
19 filler1234 1
|
|
2 filler1234 1
|
|
3 duplicate 1
|
|
3 filler1234 1
|
|
4 filler1234 1
|
|
5 filler1234 1
|
|
6 filler1234 1
|
|
7 filler1234 1
|
|
8 filler1234 1
|
|
9 filler1234 1
|
|
set @@join_buffer_size = @save_join_buffer_size;
|
|
drop table t1, t2;
|
|
create table t1 (a int, b int, key(a));
|
|
create table t2 (a int, b int, key(a));
|
|
create table t3 (a int, b int, key(a));
|
|
insert into t1 select a,a from t0;
|
|
insert into t2 select a,a from t0;
|
|
insert into t3 select a,a from t0;
|
|
t2 and t3 must be use 'ref', not 'ALL':
|
|
explain select *
|
|
from t0 where a in
|
|
(select t2.a+t3.a from t1 left join (t2 join t3) on t2.a=t1.a and t3.a=t1.a);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index a a 5 NULL 10 100.00 Using index; Start temporary
|
|
1 SIMPLE t2 NULL ref a a 5 test.t1.a 1 100.00 Using index
|
|
1 SIMPLE t3 NULL ref a a 5 test.t1.a 1 100.00 Using index
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 10 10.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`a` AS `a` from `test`.`t0` semi join (`test`.`t1` join `test`.`t2` join `test`.`t3`) where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t3`.`a` = `test`.`t1`.`a`) and (`test`.`t0`.`a` = (`test`.`t1`.`a` + `test`.`t1`.`a`)))
|
|
drop table t0, t1,t2,t3;
|
|
|
|
Test that neither MaterializeLookup strategy for semijoin,
|
|
nor subquery materialization is used when BLOBs are involved
|
|
(except when arguments of some functions).
|
|
|
|
set @prefix_len = 6;
|
|
set @blob_len = 16;
|
|
set @suffix_len = @blob_len - @prefix_len;
|
|
create table t1_16 (a1 blob(16), a2 blob(16));
|
|
create table t2_16 (b1 blob(16), b2 blob(16));
|
|
create table t3_16 (c1 blob(16), c2 blob(16));
|
|
insert into t1_16 values
|
|
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
|
|
insert into t1_16 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t1_16 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_16 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t2_16 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_16 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_16 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t3_16 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t3_16 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_16 values
|
|
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select b1 from t2_16 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_16 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_16 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from `test`.`t1_16` semi join (`test`.`t2_16`) where ((`test`.`t1_16`.`a1` = `test`.`t2_16`.`b1`) and (`test`.`t2_16`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select b1 from t2_16 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where (a1,a2) in (select b1, b2 from t2_16 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_16 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_16 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from `test`.`t1_16` semi join (`test`.`t2_16`) where ((`test`.`t1_16`.`a2` = `test`.`t2_16`.`b2`) and (`test`.`t1_16`.`a1` = `test`.`t2_16`.`b1`) and (`test`.`t2_16`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where (a1,a2) in (select b1, b2 from t2_16 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_16 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_16 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from `test`.`t1_16` semi join (`test`.`t2_16`) where ((`test`.`t2_16`.`b1` > '0') and (`test`.`t1_16`.`a1` = substr(`test`.`t2_16`.`b1`,1,16)))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select group_concat(b1) from t2_16 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_16 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_16 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from `test`.`t1_16` where <in_optimizer>(`test`.`t1_16`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_16` group by `test`.`t2_16`.`b2` having (<cache>(`test`.`t1_16`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_16`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select group_concat(b1) from t2_16 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
set @@group_concat_max_len = 256;
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select group_concat(b1) from t2_16 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_16 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_16 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from `test`.`t1_16` where <in_optimizer>(`test`.`t1_16`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_16` group by `test`.`t2_16`.`b2` having (<cache>(`test`.`t1_16`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_16`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_16
|
|
where a1 in (select group_concat(b1) from t2_16 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
create table t1 (a1 char(8), a2 char(8)) charset latin1;
|
|
create table t2 (b1 char(8), b2 char(8)) charset latin1;
|
|
create table t3 (c1 char(8), c2 char(8)) charset latin1;
|
|
insert into t1 values ('1 - 00', '2 - 00');
|
|
insert into t1 values ('1 - 01', '2 - 01');
|
|
insert into t1 values ('1 - 02', '2 - 02');
|
|
insert into t2 values ('1 - 01', '2 - 01');
|
|
insert into t2 values ('1 - 01', '2 - 01');
|
|
insert into t2 values ('1 - 02', '2 - 02');
|
|
insert into t2 values ('1 - 02', '2 - 02');
|
|
insert into t2 values ('1 - 03', '2 - 03');
|
|
insert into t3 values ('1 - 01', '2 - 01');
|
|
insert into t3 values ('1 - 02', '2 - 02');
|
|
insert into t3 values ('1 - 03', '2 - 03');
|
|
insert into t3 values ('1 - 04', '2 - 04');
|
|
insert into t3 values ('1 - 05', '2 - 05');
|
|
insert into t3 values ('1 - 06', '2 - 06');
|
|
insert into t3 values ('1 - 07', '2 - 07');
|
|
insert into t3 values ('1 - 08', '2 - 08');
|
|
explain
|
|
select * from t1
|
|
where concat(a1,'x') IN
|
|
(select left(a1,8) from t1_16
|
|
where (a1, a2) IN
|
|
(select t2_16.b1, t2_16.b2 from t2_16, t2
|
|
where t2.b2 = substring(t2_16.b2,1,6) and
|
|
t2.b1 IN (select c1 from t3 where c2 > '0')));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1_16 NULL ALL NULL NULL NULL NULL 3 100.00 Start temporary
|
|
1 SIMPLE t2_16 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 5 20.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t1_16` join `test`.`t2_16` join `test`.`t2` join `test`.`t3`) where ((`test`.`t2_16`.`b2` = `test`.`t1_16`.`a2`) and (`test`.`t2_16`.`b1` = `test`.`t1_16`.`a1`) and (`test`.`t3`.`c1` = `test`.`t2`.`b1`) and (`test`.`t2`.`b2` = substr(`test`.`t2_16`.`b2`,1,6)) and (`test`.`t3`.`c2` > '0') and (concat(`test`.`t1`.`a1`,'x') = left(`test`.`t1_16`.`a1`,8)))
|
|
drop table t1_16, t2_16, t3_16, t1, t2, t3;
|
|
set @blob_len = 512;
|
|
set @suffix_len = @blob_len - @prefix_len;
|
|
create table t1_512 (a1 blob(512), a2 blob(512));
|
|
create table t2_512 (b1 blob(512), b2 blob(512));
|
|
create table t3_512 (c1 blob(512), c2 blob(512));
|
|
insert into t1_512 values
|
|
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
|
|
insert into t1_512 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t1_512 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_512 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t2_512 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_512 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_512 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t3_512 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t3_512 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_512 values
|
|
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select b1 from t2_512 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_512 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_512 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` semi join (`test`.`t2_512`) where ((`test`.`t1_512`.`a1` = `test`.`t2_512`.`b1`) and (`test`.`t2_512`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select b1 from t2_512 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where (a1,a2) in (select b1, b2 from t2_512 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_512 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_512 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` semi join (`test`.`t2_512`) where ((`test`.`t1_512`.`a2` = `test`.`t2_512`.`b2`) and (`test`.`t1_512`.`a1` = `test`.`t2_512`.`b1`) and (`test`.`t2_512`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where (a1,a2) in (select b1, b2 from t2_512 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_512 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_512 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` semi join (`test`.`t2_512`) where ((`test`.`t2_512`.`b1` > '0') and (`test`.`t1_512`.`a1` = substr(`test`.`t2_512`.`b1`,1,512)))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_512 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_512 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` where <in_optimizer>(`test`.`t1_512`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_512` group by `test`.`t2_512`.`b2` having (<cache>(`test`.`t1_512`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_512`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
Warnings:
|
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 2 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 3 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 4 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 5 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 6 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 7 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 8 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 9 was cut by GROUP_CONCAT()
|
|
set @@group_concat_max_len = 256;
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_512 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_512 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` where <in_optimizer>(`test`.`t1_512`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_512` group by `test`.`t2_512`.`b2` having (<cache>(`test`.`t1_512`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_512`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_512
|
|
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
Warnings:
|
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 2 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 3 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 4 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 5 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 6 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 7 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 8 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 9 was cut by GROUP_CONCAT()
|
|
drop table t1_512, t2_512, t3_512;
|
|
set @blob_len = 513;
|
|
set @suffix_len = @blob_len - @prefix_len;
|
|
create table t1_513 (a1 blob(513), a2 blob(513));
|
|
create table t2_513 (b1 blob(513), b2 blob(513));
|
|
create table t3_513 (c1 blob(513), c2 blob(513));
|
|
insert into t1_513 values
|
|
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
|
|
insert into t1_513 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t1_513 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_513 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t2_513 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_513 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_513 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t3_513 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t3_513 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_513 values
|
|
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where a1 in (select b1 from t2_513 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_513 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_513 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_513`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_513`.`a2`,7) AS `left(a2,7)` from `test`.`t1_513` semi join (`test`.`t2_513`) where ((`test`.`t1_513`.`a1` = `test`.`t2_513`.`b1`) and (`test`.`t2_513`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where a1 in (select b1 from t2_513 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where (a1,a2) in (select b1, b2 from t2_513 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_513 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_513 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_513`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_513`.`a2`,7) AS `left(a2,7)` from `test`.`t1_513` semi join (`test`.`t2_513`) where ((`test`.`t1_513`.`a2` = `test`.`t2_513`.`b2`) and (`test`.`t1_513`.`a1` = `test`.`t2_513`.`b1`) and (`test`.`t2_513`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where (a1,a2) in (select b1, b2 from t2_513 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where a1 in (select substring(b1,1,513) from t2_513 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_513 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_513 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_513`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_513`.`a2`,7) AS `left(a2,7)` from `test`.`t1_513` semi join (`test`.`t2_513`) where ((`test`.`t2_513`.`b1` > '0') and (`test`.`t1_513`.`a1` = substr(`test`.`t2_513`.`b1`,1,513)))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where a1 in (select substring(b1,1,513) from t2_513 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where a1 in (select group_concat(b1) from t2_513 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_513 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_513 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_513`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_513`.`a2`,7) AS `left(a2,7)` from `test`.`t1_513` where <in_optimizer>(`test`.`t1_513`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_513` group by `test`.`t2_513`.`b2` having (<cache>(`test`.`t1_513`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_513`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_513
|
|
where a1 in (select group_concat(b1) from t2_513 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
Warnings:
|
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 2 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 3 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 4 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 5 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 6 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 7 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 8 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 9 was cut by GROUP_CONCAT()
|
|
drop table t1_513, t2_513, t3_513;
|
|
set @blob_len = 1024;
|
|
set @suffix_len = @blob_len - @prefix_len;
|
|
create table t1_1024 (a1 blob(1024), a2 blob(1024));
|
|
create table t2_1024 (b1 blob(1024), b2 blob(1024));
|
|
create table t3_1024 (c1 blob(1024), c2 blob(1024));
|
|
insert into t1_1024 values
|
|
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
|
|
insert into t1_1024 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t1_1024 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_1024 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t2_1024 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_1024 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_1024 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t3_1024 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t3_1024 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_1024 values
|
|
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select b1 from t2_1024 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_1024 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_1024 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` semi join (`test`.`t2_1024`) where ((`test`.`t1_1024`.`a1` = `test`.`t2_1024`.`b1`) and (`test`.`t2_1024`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select b1 from t2_1024 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where (a1,a2) in (select b1, b2 from t2_1024 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_1024 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_1024 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` semi join (`test`.`t2_1024`) where ((`test`.`t1_1024`.`a2` = `test`.`t2_1024`.`b2`) and (`test`.`t1_1024`.`a1` = `test`.`t2_1024`.`b1`) and (`test`.`t2_1024`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where (a1,a2) in (select b1, b2 from t2_1024 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select substring(b1,1,1024) from t2_1024 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_1024 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_1024 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` semi join (`test`.`t2_1024`) where ((`test`.`t2_1024`.`b1` > '0') and (`test`.`t1_1024`.`a1` = substr(`test`.`t2_1024`.`b1`,1,1024)))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select substring(b1,1,1024) from t2_1024 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_1024 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_1024 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` where <in_optimizer>(`test`.`t1_1024`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` having (<cache>(`test`.`t1_1024`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_1024`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
Warnings:
|
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 2 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 3 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 4 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 5 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 6 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 7 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 8 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 9 was cut by GROUP_CONCAT()
|
|
set @@group_concat_max_len = 256;
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_1024 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_1024 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` where <in_optimizer>(`test`.`t1_1024`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` having (<cache>(`test`.`t1_1024`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_1024`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1024
|
|
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
Warnings:
|
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 2 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 3 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 4 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 5 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 6 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 7 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 8 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 9 was cut by GROUP_CONCAT()
|
|
drop table t1_1024, t2_1024, t3_1024;
|
|
set @blob_len = 1025;
|
|
set @suffix_len = @blob_len - @prefix_len;
|
|
create table t1_1025 (a1 blob(1025), a2 blob(1025));
|
|
create table t2_1025 (b1 blob(1025), b2 blob(1025));
|
|
create table t3_1025 (c1 blob(1025), c2 blob(1025));
|
|
insert into t1_1025 values
|
|
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
|
|
insert into t1_1025 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t1_1025 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_1025 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t2_1025 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t2_1025 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_1025 values
|
|
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
|
|
insert into t3_1025 values
|
|
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
|
|
insert into t3_1025 values
|
|
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
|
|
insert into t3_1025 values
|
|
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select b1 from t2_1025 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_1025 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_1025 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` semi join (`test`.`t2_1025`) where ((`test`.`t1_1025`.`a1` = `test`.`t2_1025`.`b1`) and (`test`.`t2_1025`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select b1 from t2_1025 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where (a1,a2) in (select b1, b2 from t2_1025 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_1025 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_1025 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` semi join (`test`.`t2_1025`) where ((`test`.`t1_1025`.`a2` = `test`.`t2_1025`.`b2`) and (`test`.`t1_1025`.`a1` = `test`.`t2_1025`.`b1`) and (`test`.`t2_1025`.`b1` > '0'))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where (a1,a2) in (select b1, b2 from t2_1025 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select substring(b1,1,1025) from t2_1025 where b1 > '0');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2_1025 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Start temporary
|
|
1 SIMPLE t1_1025 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` semi join (`test`.`t2_1025`) where ((`test`.`t2_1025`.`b1` > '0') and (`test`.`t1_1025`.`a1` = substr(`test`.`t2_1025`.`b1`,1,1025)))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select substring(b1,1,1025) from t2_1025 where b1 > '0');
|
|
left(a1,7) left(a2,7)
|
|
1 - 01x 2 - 01x
|
|
1 - 02x 2 - 02x
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_1025 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_1025 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` where <in_optimizer>(`test`.`t1_1025`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` having (<cache>(`test`.`t1_1025`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_1025`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
Warnings:
|
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 2 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 3 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 4 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 5 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 6 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 7 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 8 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 9 was cut by GROUP_CONCAT()
|
|
set @@group_concat_max_len = 256;
|
|
explain select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1_1025 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
2 DEPENDENT SUBQUERY t2_1025 NULL ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` where <in_optimizer>(`test`.`t1_1025`.`a1`,<exists>(/* select#2 */ select 1 from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` having (<cache>(`test`.`t1_1025`.`a1`) = <ref_null_helper>(group_concat(`test`.`t2_1025`.`b1` separator ',')))))
|
|
select left(a1,7), left(a2,7)
|
|
from t1_1025
|
|
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
|
left(a1,7) left(a2,7)
|
|
Warnings:
|
|
Warning 1260 Row 1 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 2 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 3 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 4 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 5 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 6 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 7 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 8 was cut by GROUP_CONCAT()
|
|
Warning 1260 Row 9 was cut by GROUP_CONCAT()
|
|
drop table t1_1025, t2_1025, t3_1025;
|
|
#
|
|
# WL#5561: Enable semi join transformation with outer join.
|
|
#
|
|
CREATE TABLE ot1(a INT);
|
|
CREATE TABLE ot2(a INT);
|
|
CREATE TABLE ot3(a INT);
|
|
CREATE TABLE it1(a INT);
|
|
CREATE TABLE it2(a INT);
|
|
CREATE TABLE it3(a INT);
|
|
INSERT INTO ot1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
|
|
INSERT INTO ot2 VALUES(0),(2),(4),(6);
|
|
INSERT INTO ot3 VALUES(0),(3),(6);
|
|
INSERT INTO it1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
|
|
INSERT INTO it2 VALUES(0),(2),(4),(6);
|
|
INSERT INTO it3 VALUES(0),(3),(6);
|
|
# Test cases, Subquery Pattern 1
|
|
# Example SQ1.1:
|
|
explain SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
WHERE ot1.a IN (SELECT a FROM it3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it3 NULL ALL NULL NULL NULL NULL 3 100.00 Start temporary
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` left join `test`.`ot2` on((`test`.`ot2`.`a` = `test`.`it3`.`a`)) semi join (`test`.`it3`) where (`test`.`ot1`.`a` = `test`.`it3`.`a`)
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
WHERE ot1.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
3 NULL
|
|
6 6
|
|
# Example SQ1.2:
|
|
explain SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it3 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` left join `test`.`ot2` on((`test`.`ot2`.`a` = `test`.`ot1`.`a`)) semi join (`test`.`it3`) where (coalesce(`test`.`ot2`.`a`,0) = `test`.`it3`.`a`)
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
3 NULL
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
# Example SQ1.3:
|
|
explain SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
WHERE (ot1.a,ot2.a) IN (SELECT a, a FROM it3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it3 NULL ALL NULL NULL NULL NULL 3 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` join `test`.`ot2` semi join (`test`.`it3`) where ((`test`.`ot2`.`a` = `test`.`it3`.`a`) and (`test`.`ot1`.`a` = `test`.`it3`.`a`))
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
WHERE (ot1.a,ot2.a) IN (SELECT a, a FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
# More test cases
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
|
|
WHERE ot1.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
3 NULL
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
|
|
WHERE ot1.a IN (SELECT a+0 FROM it3);
|
|
a a
|
|
0 0
|
|
3 NULL
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
|
|
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
3 NULL
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
WHERE COALESCE(ot2.a,0) IN (SELECT a+0 FROM it3);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
3 NULL
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
|
|
WHERE (ot1.a,ot2.a) IN (SELECT a, a FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
LEFT JOIN ot3 ON ot1.a=ot3.a
|
|
WHERE ot1.a IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
3 NULL 3
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
LEFT JOIN ot3 ON ot1.a=ot3.a
|
|
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
3 NULL 3
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
LEFT JOIN ot3 ON ot1.a=ot3.a
|
|
WHERE COALESCE(ot3.a,0) IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 2 NULL
|
|
3 NULL 3
|
|
4 4 NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
LEFT JOIN ot3 ON ot2.a=ot3.a
|
|
WHERE ot1.a IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
3 NULL NULL
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
LEFT JOIN ot3 ON ot2.a=ot3.a
|
|
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
3 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
|
|
LEFT JOIN ot3 ON ot2.a=ot3.a
|
|
WHERE COALESCE(ot3.a,0) IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 2 NULL
|
|
3 NULL NULL
|
|
4 4 NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
# Test cases, Subquery Pattern 2
|
|
# Example SQ2.1:
|
|
explain SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it3 NULL ALL NULL NULL NULL NULL 3 100.00 Start temporary
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` join `test`.`ot2` semi join (`test`.`it3`) where ((`test`.`ot1`.`a` = `test`.`it3`.`a`) and (`test`.`ot2`.`a` = `test`.`it3`.`a`))
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
# Example SQ2.2:
|
|
explain SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it2)
|
|
AND ot2.a IN (SELECT a FROM it3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it3 NULL ALL NULL NULL NULL NULL 3 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` join `test`.`ot2` semi join (`test`.`it2`) semi join (`test`.`it3`) where ((`test`.`ot2`.`a` = `test`.`it3`.`a`) and (`test`.`it2`.`a` = `test`.`it3`.`a`) and (`test`.`ot1`.`a` = `test`.`it3`.`a`))
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it2)
|
|
AND ot2.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
# More test cases
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a+0 AND ot2.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a+0 FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it2)
|
|
AND ot2.a IN (SELECT a+0 FROM it3);
|
|
a a
|
|
0 0
|
|
6 6
|
|
SELECT *
|
|
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3)
|
|
JOIN ot3 ON ot2.a=ot3.a AND ot3.a IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
6 6 6
|
|
# Test cases, Subquery Pattern 3
|
|
# Example SQ3.1:
|
|
explain SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE it3 NULL ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` left join (`test`.`ot2` semi join (`test`.`it3`)) on(((`test`.`it3`.`a` = `test`.`ot1`.`a`) and (`test`.`ot2`.`a` = `test`.`ot1`.`a`))) where true
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 NULL
|
|
3 NULL
|
|
4 NULL
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
# Example SQ3.2:
|
|
explain SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a FROM it2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` left join (`test`.`ot2` semi join (`test`.`it2`)) on(((`test`.`ot2`.`a` = `test`.`ot1`.`a`) and (`test`.`it2`.`a` = `test`.`ot1`.`a`))) where true
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a FROM it2);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 2
|
|
3 NULL
|
|
4 4
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
# Example SQ3.3
|
|
explain SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1)
|
|
AND ot2.a IN (SELECT a FROM it2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 8 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` left join (`test`.`ot2` semi join (`test`.`it1`) semi join (`test`.`it2`)) on(((`test`.`ot2`.`a` = `test`.`ot1`.`a`) and (`test`.`it2`.`a` = `test`.`ot1`.`a`) and (`test`.`it1`.`a` = `test`.`ot1`.`a`))) where true
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1)
|
|
AND ot2.a IN (SELECT a FROM it2);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 2
|
|
3 NULL
|
|
4 4
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
# Example SQ3.4
|
|
explain SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND
|
|
(ot1.a, ot2.a) IN (SELECT it1.a, it2.a
|
|
FROM it1 JOIN it2 ON it1.a=it2.a);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 8 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` left join (`test`.`ot2` semi join (`test`.`it1` join `test`.`it2`)) on(((`test`.`ot2`.`a` = `test`.`ot1`.`a`) and (`test`.`it2`.`a` = `test`.`ot1`.`a`) and (`test`.`it1`.`a` = `test`.`ot1`.`a`))) where true
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND
|
|
(ot1.a, ot2.a) IN (SELECT it1.a, it2.a
|
|
FROM it1 JOIN it2 ON it1.a=it2.a);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 2
|
|
3 NULL
|
|
4 4
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
# More test cases
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it3);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 NULL
|
|
3 NULL
|
|
4 NULL
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it3);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 NULL
|
|
3 NULL
|
|
4 NULL
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot2.a IN (SELECT a FROM it2);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 2
|
|
3 NULL
|
|
4 4
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a+0 FROM it2);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 2
|
|
3 NULL
|
|
4 4
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a+0 FROM it1)
|
|
AND ot2.a IN (SELECT a+0 FROM it2);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 2
|
|
3 NULL
|
|
4 4
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND
|
|
(ot1.a, ot2.a) IN (SELECT it1.a+0, it2.a+0
|
|
FROM it1 JOIN it2 ON it1.a=it2.a);
|
|
a a
|
|
0 0
|
|
1 NULL
|
|
2 2
|
|
3 NULL
|
|
4 4
|
|
5 NULL
|
|
6 6
|
|
7 NULL
|
|
EXPLAIN FORMAT=tree SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3)
|
|
LEFT JOIN ot3 ON ot2.a=ot3.a AND ot3.a IN (SELECT a FROM it3);
|
|
EXPLAIN
|
|
<not executable by iterator executor>
|
|
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3)
|
|
LEFT JOIN ot3 ON ot2.a=ot3.a AND ot3.a IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it3)
|
|
LEFT JOIN ot3 ON ot2.a=ot3.a+0 AND ot3.a IN (SELECT a FROM it3);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
# Test cases, Subquery Pattern 4
|
|
# Example SQ4.1:
|
|
explain SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot3 NULL ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a`,`test`.`ot3`.`a` AS `a` from `test`.`ot1` left join (`test`.`ot2` join `test`.`ot3` semi join (`test`.`it1`)) on(((`test`.`it1`.`a` = `test`.`ot1`.`a`) and (`test`.`ot3`.`a` = `test`.`ot1`.`a`) and (`test`.`ot2`.`a` = `test`.`ot1`.`a`))) where true
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
# Example SQ4.2:
|
|
explain SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot3 NULL ALL NULL NULL NULL NULL 3 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a`,`test`.`ot3`.`a` AS `a` from `test`.`ot1` join `test`.`ot2` join `test`.`ot3` semi join (`test`.`it1`) where ((`test`.`ot2`.`a` = `test`.`ot3`.`a`) and (`test`.`ot1`.`a` = `test`.`ot3`.`a`) and (`test`.`it1`.`a` = `test`.`ot3`.`a`))
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
6 6 6
|
|
# Example SQ4.3:
|
|
explain SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Start temporary
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot3 NULL ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a`,`test`.`ot3`.`a` AS `a` from `test`.`ot1` join `test`.`ot2` left join `test`.`ot3` on((`test`.`ot3`.`a` = `test`.`ot2`.`a`)) semi join (`test`.`it1`) where ((`test`.`ot1`.`a` = `test`.`ot2`.`a`) and (`test`.`it1`.`a` = `test`.`ot2`.`a`))
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
2 2 NULL
|
|
4 4 NULL
|
|
6 6 6
|
|
# Example SQ4.4:
|
|
explain SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot3 NULL ALL NULL NULL NULL NULL 3 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a`,`test`.`ot3`.`a` AS `a` from `test`.`ot1` left join (`test`.`ot2` left join `test`.`ot3` on((`test`.`ot3`.`a` = `test`.`ot1`.`a`)) semi join (`test`.`it1`)) on(((`test`.`it1`.`a` = `test`.`ot1`.`a`) and (`test`.`ot2`.`a` = `test`.`ot1`.`a`))) where true
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 2 NULL
|
|
3 NULL NULL
|
|
4 4 NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
# More test cases
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a+0)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a+0)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
|
|
a a a
|
|
0 0 0
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a+0)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
2 2 NULL
|
|
4 4 NULL
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
2 2 NULL
|
|
4 4 NULL
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1
|
|
JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
|
|
a a a
|
|
0 0 0
|
|
2 2 NULL
|
|
4 4 NULL
|
|
6 6 6
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a+0)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 2 NULL
|
|
3 NULL NULL
|
|
4 4 NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 2 NULL
|
|
3 NULL NULL
|
|
4 4 NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 2 NULL
|
|
3 NULL NULL
|
|
4 4 NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1)
|
|
LEFT JOIN
|
|
ot1 AS ot4
|
|
ON ot2.a=ot4.a;
|
|
a a a a
|
|
0 0 0 0
|
|
1 NULL NULL NULL
|
|
2 2 NULL 2
|
|
3 NULL NULL NULL
|
|
4 4 NULL 4
|
|
5 NULL NULL NULL
|
|
6 6 6 6
|
|
7 NULL NULL NULL
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a
|
|
LEFT JOIN ot1 AS ot4 ON ot3.a=ot4.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
|
|
a a a a
|
|
0 0 0 0
|
|
1 NULL NULL NULL
|
|
2 2 NULL NULL
|
|
3 NULL NULL NULL
|
|
4 4 NULL NULL
|
|
5 NULL NULL NULL
|
|
6 6 6 6
|
|
7 NULL NULL NULL
|
|
DROP TABLE ot1,ot2,ot3,it1,it2,it3;
|
|
CREATE TABLE t (
|
|
a INTEGER DEFAULT NULL
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t VALUES (1);
|
|
CREATE TABLE t2 (
|
|
a INTEGER DEFAULT NULL
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (1),(1);
|
|
CREATE TABLE t4 (
|
|
a INTEGER DEFAULT NULL
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t4 VALUES (1),(1);
|
|
CREATE TABLE v (
|
|
a INTEGER DEFAULT NULL
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO v VALUES (1),(1);
|
|
explain SELECT *
|
|
FROM t AS t1
|
|
LEFT JOIN
|
|
(t2
|
|
LEFT JOIN t AS t3
|
|
ON t3.a IN (SELECT a FROM t AS it)
|
|
JOIN t4
|
|
ON t4.a=100
|
|
)
|
|
ON TRUE
|
|
WHERE t1.a IN (SELECT * FROM v AS it2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 1 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `a`,`test`.`t3`.`a` AS `a`,`test`.`t4`.`a` AS `a` from `test`.`t` `t1` left join (`test`.`t2` left join (`test`.`t` `t3` semi join (`test`.`t` `it`)) on(((`test`.`it`.`a` = `test`.`t3`.`a`))) join `test`.`t4`) on(((`test`.`t4`.`a` = 100))) semi join (`test`.`v` `it2`) where (`test`.`it2`.`a` = `test`.`t1`.`a`)
|
|
SELECT *
|
|
FROM t AS t1
|
|
LEFT JOIN
|
|
(t2
|
|
LEFT JOIN t AS t3
|
|
ON t3.a IN (SELECT a FROM t AS it)
|
|
JOIN t4
|
|
ON t4.a=100
|
|
)
|
|
ON TRUE
|
|
WHERE t1.a IN (SELECT * FROM v AS it2);
|
|
a a a a
|
|
1 NULL NULL NULL
|
|
DROP TABLE t,t2,t4,v;
|
|
# End of WL#5561
|
|
#
|
|
# Bug#48868: Left outer join in subquery causes segmentation fault in
|
|
# make_join_select.
|
|
#
|
|
CREATE TABLE t1 (i INTEGER);
|
|
INSERT INTO t1 VALUES (1);
|
|
INSERT INTO t1 VALUES (2);
|
|
CREATE TABLE t2 (i INTEGER);
|
|
INSERT INTO t2 VALUES(1);
|
|
CREATE TABLE t3 (i INTEGER);
|
|
INSERT INTO t3 VALUES (1);
|
|
INSERT INTO t3 VALUES (2);
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t2.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
|
|
i
|
|
1
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
Bug#37899: Wrongly checked optimization prerequisite caused failed
|
|
assertion.
|
|
|
|
CREATE TABLE t1 (
|
|
`pk` int(11),
|
|
`varchar_nokey` varchar(5)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES
|
|
(1,'qk'),(2,'j'),(3,'aew');
|
|
SELECT *
|
|
FROM t1
|
|
WHERE varchar_nokey IN (
|
|
SELECT
|
|
varchar_nokey
|
|
FROM
|
|
t1
|
|
) XOR pk = 30;
|
|
pk varchar_nokey
|
|
1 qk
|
|
2 j
|
|
3 aew
|
|
drop table t1;
|
|
#
|
|
# BUG#41842: Semi-join materialization strategy crashes when the upper query has HAVING
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int(11) NOT NULL AUTO_INCREMENT,
|
|
int_nokey int(11) NOT NULL,
|
|
time_key time NOT NULL,
|
|
datetime_key datetime NOT NULL,
|
|
datetime_nokey datetime NOT NULL,
|
|
varchar_key varchar(1) NOT NULL,
|
|
varchar_nokey varchar(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY time_key (time_key),
|
|
KEY datetime_key (datetime_key),
|
|
KEY varchar_key (varchar_key)
|
|
) ENGINE=MyISaM;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES
|
|
(1,0, '00:16:10','2008-09-03 14:25:40','2008-09-03 14:25:40','h','h'),
|
|
(2,7, '00:00:00','2001-01-13 00:00:00','2001-01-13 00:00:00','',''),
|
|
(3,0, '00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','x','x'),
|
|
(4,2, '16:29:24','2000-10-16 01:39:08','2000-10-16 01:39:08','w','w'),
|
|
(5,1, '09:23:32','0000-00-00 00:00:00','0000-00-00 00:00:00','p','p'),
|
|
(6,3, '00:00:00','2007-12-02 00:00:00','2007-12-02 00:00:00','o','o'),
|
|
(7,3, '00:00:00','2008-09-11 00:00:00','2008-09-11 00:00:00','',''),
|
|
(8,0, '13:59:04','0000-00-00 00:00:00','0000-00-00 00:00:00','s','s'),
|
|
(9,7, '09:01:06','0000-00-00 00:00:00','0000-00-00 00:00:00','d','d'),
|
|
(10,5,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','n','n'),
|
|
(11,0,'21:06:46','0000-00-00 00:00:00','0000-00-00 00:00:00','o','o'),
|
|
(12,2,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','',''),
|
|
(13,6,'14:45:34','2003-07-28 02:34:08','2003-07-28 02:34:08','w','w'),
|
|
(14,1,'15:04:12','0000-00-00 00:00:00','0000-00-00 00:00:00','o','o'),
|
|
(15,0,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','x','x'),
|
|
(16,0,'15:55:23','2004-03-17 00:32:27','2004-03-17 00:32:27','p','p'),
|
|
(17,1,'16:30:00','2004-12-27 19:20:00','2004-12-27 19:20:00','d','d'),
|
|
(18,0,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','h','h'),
|
|
(19,0,'14:13:26','2008-11-09 05:53:48','2008-11-09 05:53:48','o','o'),
|
|
(20,0,'00:00:00','2009-10-11 06:58:04','2009-10-11 06:58:04','k','k');
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 3
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 3
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 5
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 5
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 8
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 8
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 9
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 9
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 10
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 10
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 11
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 11
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 12
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 12
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 14
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 14
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 15
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 15
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 18
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 18
|
|
CREATE TABLE t2 (
|
|
pk int(11) NOT NULL AUTO_INCREMENT,
|
|
int_nokey int(11) NOT NULL,
|
|
time_key time NOT NULL,
|
|
datetime_key datetime NOT NULL,
|
|
datetime_nokey datetime NOT NULL,
|
|
varchar_key varchar(1) NOT NULL,
|
|
varchar_nokey varchar(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY time_key (time_key),
|
|
KEY datetime_key (datetime_key),
|
|
KEY varchar_key (varchar_key)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT IGNORE INTO t2 VALUES
|
|
(10,0,'19:39:13','0000-00-00 00:00:00','0000-00-00 00:00:00','g','g'),
|
|
(11,8,'03:43:53','0000-00-00 00:00:00','0000-00-00 00:00:00','b','b');
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 1
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 1
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 2
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 2
|
|
SELECT OUTR.datetime_nokey AS X FROM t1 AS OUTR
|
|
WHERE
|
|
OUTR.varchar_nokey IN (SELECT
|
|
INNR . varchar_nokey AS Y
|
|
FROM t2 AS INNR
|
|
WHERE
|
|
INNR . datetime_key >= INNR . time_key OR
|
|
INNR . pk = INNR . int_nokey
|
|
)
|
|
AND OUTR . varchar_nokey <= 'w'
|
|
HAVING X > '2012-12-12';
|
|
X
|
|
drop table t1, t2;
|
|
|
|
Bug#46797 "Crash in fix_semijoin_strategies_for_picked_join_order
|
|
with semijoin=on"
|
|
|
|
CREATE TABLE t1 (
|
|
varchar_key varchar(1) DEFAULT NULL,
|
|
KEY varchar_key (varchar_key)
|
|
);
|
|
CREATE TABLE t2 (
|
|
varchar_key varchar(1) DEFAULT NULL,
|
|
KEY varchar_key (varchar_key)
|
|
);
|
|
INSERT INTO t2 VALUES
|
|
(NULL),(NULL),(NULL),(NULL),('a'),('a'),('a'),('b'),('b'),('b'),('b'),('c'),
|
|
('c'),('c'),('c'),('c'),('c'),('c'),('d'),('d'),('d'),('d'),('d'),('d'),('e'),
|
|
('e'),('e'),('e'),('e'),('e'),('f'),('f'),('f'),('g'),('g'),('h'),('h'),('h'),
|
|
('h'),('i'),('j'),('j'),('j'),('k'),('k'),('l'),('l'),('m'),('m'),('m'),('m'),
|
|
('n'),('n'),('n'),('o'),('o'),('o'),('p'),('p'),('p'),('q'),('q'),('q'),('r'),
|
|
('r'),('r'),('r'),('s'),('s'),('s'),('s'),('t'),('t'),('t'),('t'),('u'),('u'),
|
|
('u'),('u'),('v'),('v'),('v'),('v'),('w'),('w'),('w'),('w'),('w'),('w'),('x'),
|
|
('x'),('x'),('y'),('y'),('y'),('y'),('z'),('z'),('z'),('z');
|
|
CREATE TABLE t3 (
|
|
varchar_key varchar(1) DEFAULT NULL,
|
|
KEY varchar_key (varchar_key)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
INSERT INTO t3 VALUES
|
|
(NULL),('c'),('d'),('e'),('f'),('h'),('j'),('k'),('k'),('m'),('m'),('m'),
|
|
('n'),('o'),('r'),('t'),('t'),('u'),('w'),('y');
|
|
SELECT varchar_key FROM t3
|
|
WHERE (SELECT varchar_key FROM t3
|
|
WHERE (varchar_key,varchar_key)
|
|
IN (SELECT t1.varchar_key, t2 .varchar_key
|
|
FROM t1 RIGHT JOIN t2 ON t1.varchar_key
|
|
)
|
|
);
|
|
varchar_key
|
|
DROP TABLE t1, t2, t3;
|
|
#
|
|
# Bug#46556 Returning incorrect, empty results for some IN subqueries
|
|
# w/semijoin=on
|
|
#
|
|
CREATE TABLE t0 (
|
|
pk INTEGER,
|
|
vkey VARCHAR(1),
|
|
vnokey VARCHAR(1),
|
|
PRIMARY KEY (pk),
|
|
KEY vkey(vkey)
|
|
) charset utf8mb4;
|
|
INSERT INTO t0
|
|
VALUES (1,'g','g'), (2,'v','v'), (3,'t','t'), (4,'u','u'), (5,'n','n');
|
|
EXPLAIN SELECT vkey FROM t0 WHERE pk IN
|
|
(SELECT t1.pk FROM t0 t1 JOIN t0 t2 ON t2.vkey = t1.vnokey);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL index vkey vkey 7 NULL 5 100.00 Using index; Start temporary
|
|
1 SIMPLE t1 NULL ALL PRIMARY NULL NULL NULL 5 20.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t0 NULL eq_ref PRIMARY PRIMARY 4 test.t1.pk 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`vkey` AS `vkey` from `test`.`t0` `t1` join `test`.`t0` semi join (`test`.`t0` `t2`) where ((`test`.`t1`.`vnokey` = `test`.`t2`.`vkey`) and (`test`.`t0`.`pk` = `test`.`t1`.`pk`))
|
|
SELECT vkey FROM t0 WHERE pk IN
|
|
(SELECT t1.pk FROM t0 t1 JOIN t0 t2 ON t2.vkey = t1.vnokey);
|
|
vkey
|
|
g
|
|
n
|
|
t
|
|
u
|
|
v
|
|
DROP TABLE t0;
|
|
# End of bug#46556
|
|
|
|
Bug#48834: Procedure with view + subquery + semijoin=on
|
|
crashes on second call.
|
|
|
|
CREATE TABLE t1 ( t1field integer, primary key (t1field));
|
|
CREATE TABLE t2 ( t2field integer, primary key (t2field));
|
|
CREATE VIEW v1 AS
|
|
SELECT t1field as v1field
|
|
FROM t1 A
|
|
WHERE A.t1field IN (SELECT t1field FROM t2 );
|
|
CREATE VIEW v2 AS
|
|
SELECT t2field as v2field
|
|
FROM t2 A
|
|
WHERE A.t2field IN (SELECT t2field FROM t2 );
|
|
CREATE PROCEDURE p1 ()
|
|
BEGIN
|
|
SELECT v1field
|
|
FROM v1
|
|
WHERE v1field IN ( SELECT v2field as vf_inner FROM v2 );
|
|
END|
|
|
INSERT INTO t1 VALUES (1),(2),(3);
|
|
INSERT INTO t2 VALUES (2),(3),(4);
|
|
CALL p1;
|
|
v1field
|
|
2
|
|
3
|
|
CALL p1;
|
|
v1field
|
|
2
|
|
3
|
|
DROP TABLE t1,t2;
|
|
DROP VIEW v1,v2;
|
|
DROP PROCEDURE p1;
|
|
# End of BUG#48834
|
|
#
|
|
# Bug#46692 "Crash occurring on queries with nested FROM subqueries
|
|
# using materialization."
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER PRIMARY KEY,
|
|
int_key INTEGER,
|
|
KEY int_key(int_key)
|
|
);
|
|
INSERT INTO t1 VALUES (10,186),(11,NULL),(12,2),(13,3),(14,0),(15,133),(16,1);
|
|
CREATE TABLE t2 (
|
|
pk INTEGER PRIMARY KEY,
|
|
int_key INTEGER,
|
|
KEY int_key(int_key)
|
|
);
|
|
INSERT INTO t2 VALUES (1,7),(2,2);
|
|
SELECT * FROM t1 WHERE (140, 4) IN
|
|
(SELECT t2.int_key, t2 .pk FROM t2 STRAIGHT_JOIN t1 ON t2.int_key);
|
|
pk int_key
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# Bug#42353 "SELECT ... WHERE oe IN (SELECT w/ LEFT JOIN) query
|
|
# causes crash."
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER PRIMARY KEY,
|
|
int_nokey INTEGER,
|
|
int_key INTEGER,
|
|
date_key DATE,
|
|
datetime_nokey DATETIME,
|
|
varchar_nokey VARCHAR(1)
|
|
);
|
|
CREATE TABLE t2 (
|
|
date_nokey DATE
|
|
);
|
|
CREATE TABLE t3 (
|
|
pk INTEGER PRIMARY KEY,
|
|
int_nokey INTEGER,
|
|
date_key date,
|
|
varchar_key VARCHAR(1),
|
|
varchar_nokey VARCHAR(1),
|
|
KEY date_key (date_key)
|
|
);
|
|
SELECT date_key FROM t1
|
|
WHERE (int_key, int_nokey)
|
|
IN (SELECT t3.int_nokey, t3.pk
|
|
FROM t2 LEFT JOIN t3 ON (t2.date_nokey < t3.date_key)
|
|
WHERE t3.varchar_key <= t3.varchar_nokey OR t3.int_nokey <= t3.pk
|
|
)
|
|
AND (varchar_nokey <> 'f' OR NOT int_key < 7);
|
|
date_key
|
|
#
|
|
# Bug#45933 "Crash in optimize_semijoin_nests on JOIN in subquery
|
|
# + AND in outer query".
|
|
#
|
|
INSERT INTO t1 VALUES (10,7,5,'2009-06-16','2002-04-10 14:25:30','w'),
|
|
(11,7,0,'0000-00-00','0000-00-00 00:00:00','s'),
|
|
(12,4,0,'2003-07-14','2006-09-14 04:01:02','y'),
|
|
(13,0,4,'2002-07-25','0000-00-00 00:00:00','c'),
|
|
(14,1,8,'2007-07-03','0000-00-00 00:00:00','q'),
|
|
(15,6,5,'2001-11-12','0000-00-00 00:00:00',''),
|
|
(16,2,9,'0000-00-00','0000-00-00 00:00:00','j'),
|
|
(29,9,1,'0000-00-00','2003-08-11 00:00:00','m');
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'date_key' at row 2
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 2
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 4
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 5
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 6
|
|
Warning 1264 Out of range value for column 'date_key' at row 7
|
|
Warning 1264 Out of range value for column 'datetime_nokey' at row 7
|
|
Warning 1264 Out of range value for column 'date_key' at row 8
|
|
INSERT IGNORE INTO t3 VALUES (1,9,'0000-00-00','b','b'),
|
|
(2,2,'2002-09-17','h','h');
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'date_key' at row 1
|
|
SELECT t1.varchar_nokey FROM t1 JOIN t3 ON t1.datetime_nokey
|
|
WHERE t1.varchar_nokey
|
|
IN (SELECT varchar_nokey FROM t1
|
|
WHERE (pk)
|
|
IN (SELECT t3.int_nokey
|
|
FROM t3 LEFT JOIN t1 ON t1.varchar_nokey
|
|
WHERE t3.date_key BETWEEN '2008-06-07' AND '2006-06-26'
|
|
)
|
|
);
|
|
varchar_nokey
|
|
DROP TABLE t1, t2, t3;
|
|
#
|
|
# Bug#45219 "Crash on SELECT DISTINCT query containing a
|
|
# LEFT JOIN in subquery"
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER NOT NULL,
|
|
int_nokey INTEGER NOT NULL,
|
|
datetime_key DATETIME NOT NULL,
|
|
varchar_key VARCHAR(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY datetime_key (datetime_key),
|
|
KEY varchar_key (varchar_key)
|
|
);
|
|
INSERT IGNORE INTO t1 VALUES
|
|
(1,9,'0000-00-00 00:00:00','p'),(2,0,'2002-02-09 07:38:13','v'),
|
|
(3,8,'2001-05-03 12:08:14','t'),(4,3,'0000-00-00 00:00:00','u'),
|
|
(5,7,'2009-07-28 03:43:30','n'),(6,0,'2009-08-04 00:00:00','l'),
|
|
(7,1,'0000-00-00 00:00:00','h'),(8,9,'0000-00-00 00:00:00','u'),
|
|
(9,0,'2005-08-02 17:16:54','n'),(10,9,'2002-12-21 00:00:00','j'),
|
|
(11,0,'2005-08-15 12:37:35','k'),(12,5,'0000-00-00 00:00:00','e'),
|
|
(13,0,'2006-03-10 00:00:00','i'),(14,8,'2005-05-16 11:02:36','u'),
|
|
(15,8,'2008-11-02 00:00:00','n'),(16,5,'2006-03-15 00:00:00','b'),
|
|
(17,1,'0000-00-00 00:00:00','x'),(18,7,'0000-00-00 00:00:00',''),
|
|
(19,0,'2008-12-17 20:15:40','q'),(20,9,'0000-00-00 00:00:00','u');
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 1
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 4
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 7
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 8
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 12
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 17
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 18
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 20
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUES
|
|
(10,0,'2006-07-07 07:26:28','q'),(11,5,'2002-09-23 00:00:00','m'),
|
|
(12,7,'0000-00-00 00:00:00','j'),(13,1,'2006-06-07 00:00:00','z'),
|
|
(14,8,'2000-09-16 12:15:34','a'),(15,2,'2007-08-05 15:47:52',''),
|
|
(16,1,'0000-00-00 00:00:00','e'),(17,8,'2005-12-02 19:34:26','t'),
|
|
(18,5,'0000-00-00 00:00:00','q'),(19,4,'0000-00-00 00:00:00','b'),
|
|
(20,5,'2007-12-28 00:00:00','w'),(21,3,'2004-08-02 11:48:43','m'),
|
|
(22,0,'0000-00-00 00:00:00','x'),(23,8,'2004-04-19 12:18:43',''),
|
|
(24,0,'2009-04-27 00:00:00','w'),(25,4,'2006-10-20 14:52:15','x'),
|
|
(26,0,'0000-00-00 00:00:00','e'),(27,0,'2002-03-22 11:48:37','e'),
|
|
(28,2,'0000-00-00 00:00:00','p'),(29,0,'2001-01-04 03:55:07','x');
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 3
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 7
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 9
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 10
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 13
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 17
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 19
|
|
CREATE TABLE t3 LIKE t1;
|
|
INSERT INTO t3 VALUES
|
|
(10,8,'2007-08-19 08:08:38','i'),(11,0,'2000-05-21 03:51:51','');
|
|
SELECT DISTINCT datetime_key FROM t1
|
|
WHERE (int_nokey, pk)
|
|
IN (SELECT t3.pk, t3.pk FROM t2 LEFT JOIN t3 ON t3.varchar_key)
|
|
AND pk = 9;
|
|
datetime_key
|
|
DROP TABLE t1, t2, t3;
|
|
#
|
|
# Bug#46550 Azalea returning duplicate results for some IN subqueries
|
|
# w/ semijoin=on
|
|
#
|
|
DROP TABLE IF EXISTS t0, t1, t2;
|
|
CREATE TABLE t0 (
|
|
int_key int(11) DEFAULT NULL,
|
|
varchar_key varchar(1) DEFAULT NULL,
|
|
varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY int_key (int_key),
|
|
KEY varchar_key (varchar_key,int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t0 VALUES
|
|
(1,'m','m'),
|
|
(40,'h','h'),
|
|
(1,'r','r'),
|
|
(1,'h','h'),
|
|
(9,'x','x'),
|
|
(NULL,'q','q'),
|
|
(NULL,'k','k'),
|
|
(7,'l','l'),
|
|
(182,'k','k'),
|
|
(202,'a','a'),
|
|
(7,'x','x'),
|
|
(6,'j','j'),
|
|
(119,'z','z'),
|
|
(4,'d','d'),
|
|
(5,'h','h'),
|
|
(1,'u','u'),
|
|
(3,'q','q'),
|
|
(7,'a','a'),
|
|
(3,'e','e'),
|
|
(6,'l','l');
|
|
CREATE TABLE t1 (
|
|
int_key int(11) DEFAULT NULL,
|
|
varchar_key varchar(1) DEFAULT NULL,
|
|
varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY int_key (int_key),
|
|
KEY varchar_key (varchar_key,int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES (7,NULL,NULL),(4,'x','x');
|
|
CREATE TABLE t2 (
|
|
int_key int(11) DEFAULT NULL,
|
|
varchar_key varchar(1) DEFAULT NULL,
|
|
varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY int_key (int_key),
|
|
KEY varchar_key (varchar_key,int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t2 VALUES (123,NULL,NULL);
|
|
SELECT int_key
|
|
FROM t0
|
|
WHERE varchar_nokey IN (
|
|
SELECT t1 .varchar_key from t1
|
|
);
|
|
int_key
|
|
7
|
|
9
|
|
SELECT t0.int_key
|
|
FROM t0
|
|
WHERE t0.varchar_nokey IN (
|
|
SELECT t1_1 .varchar_key
|
|
FROM t1 AS t1_1 JOIN t1 AS t1_2 ON t1_1 .int_key
|
|
);
|
|
int_key
|
|
7
|
|
9
|
|
EXPLAIN
|
|
SELECT t0.int_key
|
|
FROM t0
|
|
WHERE t0.varchar_nokey IN (
|
|
SELECT t1_1 .varchar_key
|
|
FROM t1 AS t1_1 JOIN t1 AS t1_2 ON t1_1 .int_key
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1_1 NULL index varchar_key varchar_key 12 NULL 2 50.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t1_2 NULL index NULL int_key 5 NULL 2 100.00 Using index; FirstMatch(t1_1)
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 20 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`int_key` AS `int_key` from `test`.`t0` semi join (`test`.`t1` `t1_1` join `test`.`t1` `t1_2`) where ((`test`.`t0`.`varchar_nokey` = `test`.`t1_1`.`varchar_key`) and (0 <> `test`.`t1_1`.`int_key`))
|
|
SELECT t0.int_key
|
|
FROM t0, t2
|
|
WHERE t0.varchar_nokey IN (
|
|
SELECT t1_1 .varchar_key
|
|
FROM t1 AS t1_1 JOIN t1 AS t1_2 ON t1_1 .int_key
|
|
);
|
|
int_key
|
|
7
|
|
9
|
|
EXPLAIN
|
|
SELECT t0.int_key
|
|
FROM t0, t2
|
|
WHERE t0.varchar_nokey IN (
|
|
SELECT t1_1 .varchar_key
|
|
FROM t1 AS t1_1 JOIN t1 AS t1_2 ON t1_1 .int_key
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t1_1 NULL index varchar_key varchar_key 12 NULL 2 50.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t1_2 NULL index NULL int_key 5 NULL 2 100.00 Using index; FirstMatch(t1_1)
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 20 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`int_key` AS `int_key` from `test`.`t0` semi join (`test`.`t1` `t1_1` join `test`.`t1` `t1_2`) where ((`test`.`t0`.`varchar_nokey` = `test`.`t1_1`.`varchar_key`) and (0 <> `test`.`t1_1`.`int_key`))
|
|
DROP TABLE t0, t1, t2;
|
|
# End of bug#46550
|
|
|
|
Bug #48073 Subquery on char columns from view crashes Mysql
|
|
|
|
DROP TABLE IF EXISTS t1, t2;
|
|
DROP VIEW IF EXISTS v1;
|
|
CREATE TABLE t1 (
|
|
city VARCHAR(50) NOT NULL,
|
|
country_id SMALLINT UNSIGNED NOT NULL
|
|
);
|
|
INSERT INTO t1 VALUES
|
|
('Batna',2),
|
|
('Bchar',2),
|
|
('Skikda',2),
|
|
('Tafuna',3),
|
|
('Algeria',2) ;
|
|
CREATE TABLE t2 (
|
|
country_id SMALLINT UNSIGNED NOT NULL,
|
|
country VARCHAR(50) NOT NULL
|
|
);
|
|
INSERT INTO t2 VALUES
|
|
(2,'Algeria'),
|
|
(3,'American Samoa') ;
|
|
CREATE VIEW v1 AS
|
|
SELECT country_id, country
|
|
FROM t2
|
|
WHERE LEFT(country,1) = "A"
|
|
;
|
|
SELECT city, country_id
|
|
FROM t1
|
|
WHERE city IN (
|
|
SELECT country
|
|
FROM t2
|
|
WHERE LEFT(country, 1) = "A"
|
|
);
|
|
city country_id
|
|
Algeria 2
|
|
SELECT city, country_id
|
|
FROM t1
|
|
WHERE city IN (
|
|
SELECT country
|
|
FROM v1
|
|
);
|
|
city country_id
|
|
Algeria 2
|
|
drop table t1, t2;
|
|
drop view v1;
|
|
# End of bug#48073
|
|
|
|
Bug#49097 subquery with view generates wrong result with
|
|
non-prepared statement
|
|
|
|
DROP TABLE IF EXISTS t1, t2;
|
|
DROP VIEW IF EXISTS v1;
|
|
CREATE TABLE t1 (
|
|
city VARCHAR(50) NOT NULL,
|
|
country_id SMALLINT UNSIGNED NOT NULL
|
|
);
|
|
INSERT INTO t1 VALUES
|
|
('Batna',2),
|
|
('Bchar',2),
|
|
('Skikda',2),
|
|
('Tafuna',3),
|
|
('Algeria',2) ;
|
|
CREATE TABLE t2 (
|
|
country_id SMALLINT UNSIGNED NOT NULL,
|
|
country VARCHAR(50) NOT NULL
|
|
);
|
|
INSERT INTO t2 VALUES
|
|
(2,'Algeria'),
|
|
(3,'XAmerican Samoa') ;
|
|
CREATE VIEW v1 AS
|
|
SELECT country_id, country
|
|
FROM t2
|
|
WHERE LEFT(country,1) = "A"
|
|
;
|
|
SELECT city, country_id
|
|
FROM t1
|
|
WHERE country_id IN (
|
|
SELECT country_id
|
|
FROM t2
|
|
WHERE LEFT(country,1) = "A"
|
|
);
|
|
city country_id
|
|
Algeria 2
|
|
Batna 2
|
|
Bchar 2
|
|
Skikda 2
|
|
SELECT city, country_id
|
|
FROM t1
|
|
WHERE country_id IN (
|
|
SELECT country_id
|
|
FROM v1
|
|
);
|
|
city country_id
|
|
Algeria 2
|
|
Batna 2
|
|
Bchar 2
|
|
Skikda 2
|
|
PREPARE stmt FROM
|
|
"
|
|
SELECT city, country_id
|
|
FROM t1
|
|
WHERE country_id IN (
|
|
SELECT country_id
|
|
FROM v1
|
|
);
|
|
";
|
|
execute stmt;
|
|
city country_id
|
|
Algeria 2
|
|
Batna 2
|
|
Bchar 2
|
|
Skikda 2
|
|
deallocate prepare stmt;
|
|
drop table t1, t2;
|
|
drop view v1;
|
|
# End of Bug#49097
|
|
#
|
|
# Bug#49198 Wrong result for second call of procedure
|
|
# with view in subselect.
|
|
#
|
|
CREATE TABLE t1 (t1field integer, primary key (t1field));
|
|
CREATE TABLE t2 (t2field integer, primary key (t2field));
|
|
CREATE TABLE t3 (t3field integer, primary key (t3field));
|
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
|
CREATE VIEW v3 AS SELECT * FROM t3;
|
|
INSERT INTO t1 VALUES(1),(2);
|
|
INSERT INTO t2 VALUES(1),(2);
|
|
INSERT INTO t3 VALUES(1),(2);
|
|
PREPARE stmt FROM
|
|
"
|
|
SELECT t1field
|
|
FROM t1
|
|
WHERE t1field IN (SELECT * FROM v2);
|
|
";
|
|
EXECUTE stmt;
|
|
t1field
|
|
1
|
|
2
|
|
EXECUTE stmt;
|
|
t1field
|
|
1
|
|
2
|
|
PREPARE stmt FROM
|
|
"
|
|
EXPLAIN
|
|
SELECT t1field
|
|
FROM t1
|
|
WHERE t1field IN (SELECT * FROM v2)
|
|
AND t1field IN (SELECT * FROM v3)
|
|
";
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index PRIMARY PRIMARY 4 NULL 2 100.00 Using index
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
1 SIMPLE t3 NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`t1field` AS `t1field` from `test`.`t2` join `test`.`t3` join `test`.`t1` where ((`test`.`t2`.`t2field` = `test`.`t1`.`t1field`) and (`test`.`t3`.`t3field` = `test`.`t1`.`t1field`))
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index PRIMARY PRIMARY 4 NULL 2 100.00 Using index
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
1 SIMPLE t3 NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`t1field` AS `t1field` from `test`.`t2` join `test`.`t3` join `test`.`t1` where ((`test`.`t2`.`t2field` = `test`.`t1`.`t1field`) and (`test`.`t3`.`t3field` = `test`.`t1`.`t1field`))
|
|
DROP TABLE t1, t2, t3;
|
|
DROP VIEW v2, v3;
|
|
# End of Bug#49198
|
|
#
|
|
# Bug#48623 Multiple subqueries are optimized incorrectly
|
|
#
|
|
CREATE TABLE ot(val VARCHAR(10)) charset utf8mb4;
|
|
CREATE TABLE it1(val VARCHAR(10)) charset utf8mb4;
|
|
CREATE TABLE it2(val VARCHAR(10)) charset utf8mb4;
|
|
INSERT INTO ot VALUES('aaa'), ('bbb'), ('eee'), ('mmm'), ('ppp');
|
|
INSERT INTO it1 VALUES('aaa'), ('aaa'), ('bbb'), ('eee'), ('mmm'), ('ppp');
|
|
INSERT INTO it2 VALUES('aaa'), ('bbb'), ('eee'), ('mmm'), ('ppp');
|
|
EXPLAIN
|
|
SELECT *
|
|
FROM ot
|
|
WHERE ot.val IN (SELECT it1.val FROM it1
|
|
WHERE it1.val LIKE 'a%' OR it1.val LIKE 'e%')
|
|
AND ot.val IN (SELECT it2.val FROM it2
|
|
WHERE it2.val LIKE 'a%' OR it2.val LIKE 'e%');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 5 36.00 Using where; Start temporary
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 5 20.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`val` AS `val` from `test`.`ot` semi join (`test`.`it1`) semi join (`test`.`it2`) where ((`test`.`ot`.`val` = `test`.`it2`.`val`) and (`test`.`it1`.`val` = `test`.`it2`.`val`) and ((`test`.`it1`.`val` like 'a%') or (`test`.`it1`.`val` like 'e%')) and ((`test`.`it2`.`val` like 'a%') or (`test`.`it2`.`val` like 'e%')))
|
|
SELECT *
|
|
FROM ot
|
|
WHERE ot.val IN (SELECT it1.val FROM it1
|
|
WHERE it1.val LIKE 'a%' OR it1.val LIKE 'e%')
|
|
AND ot.val IN (SELECT it2.val FROM it2
|
|
WHERE it2.val LIKE 'a%' OR it2.val LIKE 'e%');
|
|
val
|
|
aaa
|
|
eee
|
|
DROP TABLE ot;
|
|
DROP TABLE it1;
|
|
DROP TABLE it2;
|
|
# End of Bug#48623
|
|
#
|
|
# Bug #51487 Assertion failure when semi-join flattening occurs
|
|
# for a subquery in HAVING
|
|
#
|
|
CREATE TABLE t1 (a INT, b INT);
|
|
INSERT INTO t1 VALUES (1,10),(2,11),(1,13);
|
|
CREATE TABLE t2 AS SELECT * FROM t1;
|
|
CREATE TABLE t3 AS SELECT * FROM t1;
|
|
SELECT COUNT(*) FROM t1
|
|
GROUP BY t1.a
|
|
HAVING t1.a IN (SELECT t3.a FROM t3
|
|
WHERE t3.b IN (SELECT b FROM t2 WHERE t2.a=t1.a));
|
|
COUNT(*)
|
|
2
|
|
1
|
|
DROP TABLE t1, t2, t3;
|
|
# End of Bug#51487
|
|
#
|
|
# BUG#38075: Wrong result: rows matching a subquery with outer join not returned
|
|
#
|
|
DROP TABLE IF EXISTS ot1, it1, it2;
|
|
CREATE TABLE it2 (
|
|
int_key int(11) NOT NULL,
|
|
datetime_key datetime NOT NULL,
|
|
KEY int_key (int_key),
|
|
KEY datetime_key (datetime_key)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO it2 VALUES
|
|
(5,'2002-04-10 14:25:30'), (0,'0000-00-00 00:00:00'),
|
|
(0,'2006-09-14 04:01:02'), (4,'0000-00-00 00:00:00'),
|
|
(8,'0000-00-00 00:00:00'), (5,'0000-00-00 00:00:00'),
|
|
(9,'0000-00-00 00:00:00'), (8,'2007-04-01 11:04:17'),
|
|
(1,'0000-00-00 00:00:00'), (7,'2009-01-12 00:00:00'),
|
|
(0,'2009-06-05 00:00:00'), (3,'2006-02-14 18:06:35'),
|
|
(5,'2006-02-21 07:08:16'), (0,'0000-00-00 00:00:00'),
|
|
(7,'0000-00-00 00:00:00'), (0,'0000-00-00 00:00:00'),
|
|
(0,'2007-02-13 00:00:00'), (1,'0000-00-00 00:00:00'),
|
|
(0,'0000-00-00 00:00:00'), (1,'2003-08-11 00:00:00');
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 2
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 4
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 5
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 6
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 7
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 9
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 14
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 15
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 16
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 18
|
|
Warning 1264 Out of range value for column 'datetime_key' at row 19
|
|
CREATE TABLE ot1 (
|
|
int_nokey int(11) NOT NULL,
|
|
int_key int(11) NOT NULL,
|
|
KEY int_key (int_key)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO ot1 VALUES
|
|
(5,0), (3,0), (0,2), (3,0), (1,3), (0,0), (1,7), (7,0), (1,7), (0,7),
|
|
(0,9), (8,2), (4,4), (9,3), (0,9), (2,5), (0,5), (8,0), (5,8), (1,5);
|
|
CREATE TABLE it1 (
|
|
int_nokey int(11) NOT NULL,
|
|
int_key int(11) NOT NULL,
|
|
KEY int_key (int_key)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO it1 VALUES
|
|
(9,5), (0,4);
|
|
SELECT int_key FROM ot1
|
|
WHERE int_nokey IN (SELECT it2.int_key
|
|
FROM it1 LEFT JOIN it2 ON it2.datetime_key);
|
|
int_key
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
2
|
|
2
|
|
3
|
|
5
|
|
5
|
|
7
|
|
7
|
|
7
|
|
8
|
|
9
|
|
9
|
|
EXPLAIN
|
|
SELECT int_key FROM ot1
|
|
WHERE int_nokey IN (SELECT it2.int_key
|
|
FROM it1 LEFT JOIN it2 ON it2.datetime_key);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 20 100.00 Start temporary
|
|
1 SIMPLE it2 NULL ref int_key int_key 4 test.ot1.int_nokey 2 90.00 Using where
|
|
1 SIMPLE it1 NULL index NULL int_key 4 NULL 2 100.00 Using index; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`int_key` AS `int_key` from `test`.`ot1` semi join (`test`.`it1` join `test`.`it2`) where ((`test`.`it2`.`int_key` = `test`.`ot1`.`int_nokey`) and (TIMESTAMP'0000-00-00 00:00:00' <> `test`.`it2`.`datetime_key`))
|
|
DROP TABLE ot1, it1, it2;
|
|
# End of BUG#38075
|
|
#
|
|
# BUG#50089: Second call of procedure with view in subselect crashes server
|
|
#
|
|
CREATE TABLE t1(t1field INTEGER, PRIMARY KEY(t1field));
|
|
CREATE VIEW v1 AS
|
|
SELECT t1field AS v1field
|
|
FROM t1 a
|
|
WHERE a.t1field IN (SELECT t1field FROM t1);
|
|
INSERT INTO t1 VALUES(1),(2);
|
|
SELECT t1field
|
|
FROM t1
|
|
WHERE t1field IN (SELECT v1field FROM v1);
|
|
t1field
|
|
1
|
|
2
|
|
EXPLAIN
|
|
SELECT t1field
|
|
FROM t1
|
|
WHERE t1field IN (SELECT v1field FROM v1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index PRIMARY PRIMARY 4 NULL 2 100.00 Using index
|
|
1 SIMPLE a NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
1 SIMPLE t1 NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `t1`.`t1field` AS `t1field` from `test`.`t1` `a` join `test`.`t1` join `test`.`t1` where ((`test`.`a`.`t1field` = `t1`.`t1field`) and (`test`.`t1`.`t1field` = `t1`.`t1field`))
|
|
SELECT t1.t1field
|
|
FROM t1 LEFT JOIN t1 AS t2 ON t1.t1field IN (SELECT v1field FROM v1);
|
|
t1field
|
|
1
|
|
1
|
|
2
|
|
2
|
|
EXPLAIN
|
|
SELECT t1field
|
|
FROM t1
|
|
WHERE t1field IN (SELECT v1field FROM v1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index PRIMARY PRIMARY 4 NULL 2 100.00 Using index
|
|
1 SIMPLE a NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
1 SIMPLE t1 NULL eq_ref PRIMARY PRIMARY 4 test.t1.t1field 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `t1`.`t1field` AS `t1field` from `test`.`t1` `a` join `test`.`t1` join `test`.`t1` where ((`test`.`a`.`t1field` = `t1`.`t1field`) and (`test`.`t1`.`t1field` = `t1`.`t1field`))
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
SELECT t1field
|
|
FROM t1
|
|
WHERE t1field IN (SELECT v1field FROM v1);
|
|
END|
|
|
CALL p1;
|
|
t1field
|
|
1
|
|
2
|
|
CALL p1;
|
|
t1field
|
|
1
|
|
2
|
|
PREPARE stmt FROM
|
|
"
|
|
SELECT t1field
|
|
FROM t1
|
|
WHERE t1field IN (SELECT v1field FROM v1);
|
|
";
|
|
EXECUTE stmt;
|
|
t1field
|
|
1
|
|
2
|
|
EXECUTE stmt;
|
|
t1field
|
|
1
|
|
2
|
|
DROP PROCEDURE p1;
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
# End of BUG#50089
|
|
#
|
|
# Bug#45191: Incorrectly initialized semi-join led to a wrong result.
|
|
#
|
|
CREATE TABLE staff (EMPNUM CHAR(3) NOT NULL,
|
|
EMPNAME CHAR(20), GRADE DECIMAL(4), CITY CHAR(15)) charset latin1;
|
|
CREATE TABLE proj (PNUM CHAR(3) NOT NULL,
|
|
PNAME CHAR(20), PTYPE CHAR(6),
|
|
BUDGET DECIMAL(9),
|
|
CITY CHAR(15)) charset latin1;
|
|
CREATE TABLE works (EMPNUM CHAR(3) NOT NULL,
|
|
PNUM CHAR(3) NOT NULL, HOURS DECIMAL(5)) charset latin1;
|
|
INSERT INTO staff VALUES ('E1','Alice',12,'Deale');
|
|
INSERT INTO staff VALUES ('E2','Betty',10,'Vienna');
|
|
INSERT INTO staff VALUES ('E3','Carmen',13,'Vienna');
|
|
INSERT INTO staff VALUES ('E4','Don',12,'Deale');
|
|
INSERT INTO staff VALUES ('E5','Ed',13,'Akron');
|
|
INSERT INTO proj VALUES ('P1','MXSS','Design',10000,'Deale');
|
|
INSERT INTO proj VALUES ('P2','CALM','Code',30000,'Vienna');
|
|
INSERT INTO proj VALUES ('P3','SDP','Test',30000,'Tampa');
|
|
INSERT INTO proj VALUES ('P4','SDP','Design',20000,'Deale');
|
|
INSERT INTO proj VALUES ('P5','IRM','Test',10000,'Vienna');
|
|
INSERT INTO proj VALUES ('P6','PAYR','Design',50000,'Deale');
|
|
INSERT INTO works VALUES ('E1','P1',40);
|
|
INSERT INTO works VALUES ('E1','P2',20);
|
|
INSERT INTO works VALUES ('E1','P3',80);
|
|
INSERT INTO works VALUES ('E1','P4',20);
|
|
INSERT INTO works VALUES ('E1','P5',12);
|
|
INSERT INTO works VALUES ('E1','P6',12);
|
|
INSERT INTO works VALUES ('E2','P1',40);
|
|
INSERT INTO works VALUES ('E2','P2',80);
|
|
INSERT INTO works VALUES ('E3','P2',20);
|
|
INSERT INTO works VALUES ('E4','P2',20);
|
|
INSERT INTO works VALUES ('E4','P4',40);
|
|
INSERT INTO works VALUES ('E4','P5',80);
|
|
explain SELECT EMPNUM, EMPNAME
|
|
FROM staff
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM FROM works
|
|
WHERE PNUM IN
|
|
(SELECT PNUM FROM proj));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE staff NULL ALL NULL NULL NULL NULL 5 100.00 Start temporary
|
|
1 SIMPLE works NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE proj NULL ALL NULL NULL NULL NULL 6 16.67 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`staff`.`EMPNUM` AS `EMPNUM`,`test`.`staff`.`EMPNAME` AS `EMPNAME` from `test`.`staff` semi join (`test`.`works` join `test`.`proj`) where ((`test`.`works`.`EMPNUM` = `test`.`staff`.`EMPNUM`) and (`test`.`proj`.`PNUM` = `test`.`works`.`PNUM`))
|
|
SELECT EMPNUM, EMPNAME
|
|
FROM staff
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM FROM works
|
|
WHERE PNUM IN
|
|
(SELECT PNUM FROM proj));
|
|
EMPNUM EMPNAME
|
|
E1 Alice
|
|
E2 Betty
|
|
E3 Carmen
|
|
E4 Don
|
|
drop table staff,works,proj;
|
|
# End of bug#45191
|
|
#
|
|
# BUG#36896: Server crash on SELECT FROM DUAL
|
|
#
|
|
create table t1 (a int);
|
|
select 1 as res from dual where (1) in (select * from t1);
|
|
res
|
|
drop table t1;
|
|
|
|
BUG#40118 Crash when running Batched Key Access and requiring one match for each key
|
|
|
|
create table t0(a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 (a int, key(a));
|
|
insert into t1 select * from t0;
|
|
alter table t1 add b int not null, add filler char(200);
|
|
insert into t1 select * from t1;
|
|
insert into t1 select * from t1;
|
|
select * from t0 where t0.a in (select t1.a from t1 where t1.b=0);
|
|
a
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
drop table t0, t1;
|
|
#
|
|
# BUG#32665 Query with dependent subquery is too slow
|
|
#
|
|
create table t1 (
|
|
idIndividual int primary key
|
|
);
|
|
insert into t1 values (1),(2);
|
|
create table t2 (
|
|
idContact int primary key,
|
|
contactType int,
|
|
idObj int
|
|
);
|
|
insert into t2 values (1,1,1),(2,2,2),(3,3,3);
|
|
create table t3 (
|
|
idAddress int primary key,
|
|
idContact int,
|
|
postalStripped varchar(100)
|
|
);
|
|
insert into t3 values (1,1, 'foo'), (2,2,'bar');
|
|
The following must be converted to a semi-join:
|
|
explain SELECT a.idIndividual FROM t1 a
|
|
WHERE a.idIndividual IN
|
|
( SELECT c.idObj FROM t3 cona
|
|
INNER JOIN t2 c ON c.idContact=cona.idContact
|
|
WHERE cona.postalStripped='T2H3B2'
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE cona NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary
|
|
1 SIMPLE c NULL eq_ref PRIMARY PRIMARY 4 test.cona.idContact 1 100.00 Using where
|
|
1 SIMPLE a NULL eq_ref PRIMARY PRIMARY 4 test.c.idObj 1 100.00 Using index; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`idIndividual` AS `idIndividual` from `test`.`t1` `a` semi join (`test`.`t3` `cona` join `test`.`t2` `c`) where ((`test`.`c`.`idContact` = `test`.`cona`.`idContact`) and (`test`.`a`.`idIndividual` = `test`.`c`.`idObj`) and (`test`.`cona`.`postalStripped` = 'T2H3B2'))
|
|
drop table t1,t2,t3;
|
|
CREATE TABLE t1 (one int, two int, flag char(1));
|
|
CREATE TABLE t2 (one int, two int, flag char(1));
|
|
INSERT INTO t1 VALUES(1,2,'Y'),(2,3,'Y'),(3,4,'Y'),(5,6,'N'),(7,8,'N');
|
|
INSERT INTO t2 VALUES(1,2,'Y'),(2,3,'Y'),(3,4,'Y'),(5,6,'N'),(7,8,'N');
|
|
SELECT * FROM t1
|
|
WHERE ROW(one,two) IN (SELECT DISTINCT one,two FROM t2 WHERE flag = 'N');
|
|
one two flag
|
|
5 6 N
|
|
7 8 N
|
|
SELECT * FROM t1
|
|
WHERE ROW(one,two) IN (SELECT DISTINCT one,two FROM t1 WHERE flag = 'N');
|
|
one two flag
|
|
5 6 N
|
|
7 8 N
|
|
insert into t2 values (null,null,'N');
|
|
insert into t2 values (null,3,'0');
|
|
insert into t2 values (null,5,'0');
|
|
insert into t2 values (10,null,'0');
|
|
insert into t1 values (10,3,'0');
|
|
insert into t1 values (10,5,'0');
|
|
insert into t1 values (10,10,'0');
|
|
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N') as 'test' from t1;
|
|
one two test
|
|
1 2 NULL
|
|
2 3 NULL
|
|
3 4 NULL
|
|
5 6 1
|
|
7 8 1
|
|
10 3 NULL
|
|
10 5 NULL
|
|
10 10 NULL
|
|
SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
|
|
one two
|
|
5 6
|
|
7 8
|
|
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N' group by one,two) as 'test' from t1;
|
|
one two test
|
|
1 2 NULL
|
|
2 3 NULL
|
|
3 4 NULL
|
|
5 6 1
|
|
7 8 1
|
|
10 3 NULL
|
|
10 5 NULL
|
|
10 10 NULL
|
|
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0') as 'test' from t1;
|
|
one two test
|
|
1 2 0
|
|
2 3 NULL
|
|
3 4 0
|
|
5 6 0
|
|
7 8 0
|
|
10 3 NULL
|
|
10 5 NULL
|
|
10 10 NULL
|
|
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
|
|
one two test
|
|
1 2 0
|
|
2 3 NULL
|
|
3 4 0
|
|
5 6 0
|
|
7 8 0
|
|
10 3 NULL
|
|
10 5 NULL
|
|
10 10 NULL
|
|
explain SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0') as 'test' from t1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 8 100.00 NULL
|
|
2 DEPENDENT SUBQUERY t2 NULL ALL NULL NULL NULL NULL 9 11.11 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(/* select#2 */ select 1,1 from `test`.`t2` where ((`test`.`t2`.`flag` = '0') and <if>(outer_field_is_not_null, ((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or (`test`.`t2`.`one` is null)), true) and <if>(outer_field_is_not_null, ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or (`test`.`t2`.`two` is null)), true)) having (<if>(outer_field_is_not_null, <is_not_null_test>(`test`.`t2`.`one`), true) and <if>(outer_field_is_not_null, <is_not_null_test>(`test`.`t2`.`two`), true)))) AS `test` from `test`.`t1`
|
|
explain SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 9 11.11 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`two` = `test`.`t2`.`two`) and (`test`.`t1`.`one` = `test`.`t2`.`one`) and (`test`.`t2`.`flag` = 'N'))
|
|
explain SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 8 100.00 NULL
|
|
2 DEPENDENT SUBQUERY t2 NULL ALL NULL NULL NULL NULL 9 11.11 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(/* select#2 */ select 1,1 from `test`.`t2` where ((`test`.`t2`.`flag` = '0') and <if>(outer_field_is_not_null, ((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or (`test`.`t2`.`one` is null)), true) and <if>(outer_field_is_not_null, ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or (`test`.`t2`.`two` is null)), true)) having (<if>(outer_field_is_not_null, <is_not_null_test>(`test`.`t2`.`one`), true) and <if>(outer_field_is_not_null, <is_not_null_test>(`test`.`t2`.`two`), true)))) AS `test` from `test`.`t1`
|
|
DROP TABLE t1,t2;
|
|
CREATE TABLE t1 (a char(5), b char(5));
|
|
INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa');
|
|
SELECT * FROM t1 WHERE (a,b) IN (('aaa','aaa'), ('aaa','bbb'));
|
|
a b
|
|
aaa aaa
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (a CHAR(1), b VARCHAR(10)) charset utf8mb4;
|
|
INSERT INTO t1 VALUES ('a', 'aa');
|
|
INSERT INTO t1 VALUES ('a', 'aaa');
|
|
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
|
a b
|
|
CREATE INDEX I1 ON t1 (a);
|
|
CREATE INDEX I2 ON t1 (b);
|
|
EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index I1 I1 5 NULL 2 100.00 Using index; LooseScan
|
|
1 SIMPLE t1 NULL ALL I2 NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join (`test`.`t1`) where (`test`.`t1`.`b` = `test`.`t1`.`a`)
|
|
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
|
a b
|
|
CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10)) charset utf8mb4;
|
|
INSERT INTO t2 SELECT * FROM t1;
|
|
CREATE INDEX I1 ON t2 (a);
|
|
CREATE INDEX I2 ON t2 (b);
|
|
EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL index I1 I1 7 NULL 2 100.00 Using index; LooseScan
|
|
1 SIMPLE t2 NULL ALL I2 NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` semi join (`test`.`t2`) where (`test`.`t2`.`b` = `test`.`t2`.`a`)
|
|
SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
|
a b
|
|
EXPLAIN
|
|
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index I1 I1 5 NULL 2 100.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t1 NULL ALL I2 NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join (`test`.`t1`) where ((length(`test`.`t1`.`a`) < 500) and (`test`.`t1`.`b` = `test`.`t1`.`a`))
|
|
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
|
a b
|
|
DROP TABLE t1,t2;
|
|
#
|
|
# BUG#45928 "Differing query results depending on MRR and
|
|
# engine_condition_pushdown settings"
|
|
#
|
|
CREATE TABLE `t1` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`time_nokey` time NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
`varchar_nokey` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO `t1` VALUES (10,'00:00:00','i','i'),(11,'00:00:00','','');
|
|
SELECT `time_nokey` G1 FROM t1 WHERE ( `varchar_nokey` , `varchar_key` ) IN (
|
|
SELECT `varchar_nokey` , `varchar_nokey` ) AND `varchar_key` >= 'c' HAVING G1 ORDER
|
|
BY `pk` ;
|
|
G1
|
|
DROP TABLE t1;
|
|
#
|
|
# BUG#45863 "Assertion failed: (fixed == 0), function fix_fields(),
|
|
# file item.cc, line 4448"
|
|
#
|
|
DROP TABLE IF EXISTS C, BB;
|
|
CREATE TABLE C (
|
|
varchar_nokey varchar(1) NOT NULL
|
|
);
|
|
INSERT INTO C VALUES
|
|
('k'),('a'),(''),('u'),('e'),('v'),('i'),
|
|
('t'),('u'),('f'),('u'),('m'),('j'),('f'),
|
|
('v'),('j'),('g'),('e'),('h'),('z');
|
|
CREATE TABLE BB (
|
|
varchar_nokey varchar(1) NOT NULL
|
|
);
|
|
INSERT INTO BB VALUES ('i'),('t');
|
|
SELECT varchar_nokey FROM C
|
|
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey
|
|
FROM BB);
|
|
ERROR 42S22: Unknown column 'OUTR' in 'IN/ALL/ANY subquery'
|
|
SELECT varchar_nokey FROM C
|
|
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey, varchar_nokey
|
|
FROM BB);
|
|
ERROR 42S22: Unknown column 'OUTR' in 'IN/ALL/ANY subquery'
|
|
DROP TABLE C,BB;
|
|
#
|
|
# During work with BUG#45863 I had problems with a query that was
|
|
# optimized differently in regular and prepared mode.
|
|
# Because there was a bug in one of the selected strategies, I became
|
|
# aware of the problem. Adding an EXPLAIN query to catch this.
|
|
DROP TABLE IF EXISTS t1, t2, t3;
|
|
CREATE TABLE t1
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
EMPNAME CHAR(20),
|
|
GRADE DECIMAL(4),
|
|
CITY CHAR(15)) charset latin1;
|
|
CREATE TABLE t2
|
|
(PNUM CHAR(3) NOT NULL,
|
|
PNAME CHAR(20),
|
|
PTYPE CHAR(6),
|
|
BUDGET DECIMAL(9),
|
|
CITY CHAR(15)) charset latin1;
|
|
CREATE TABLE t3
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
PNUM CHAR(3) NOT NULL,
|
|
HOURS DECIMAL(5)) charset latin1;
|
|
INSERT INTO t1 VALUES ('E1','Alice',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E2','Betty',10,'Vienna');
|
|
INSERT INTO t1 VALUES ('E3','Carmen',13,'Vienna');
|
|
INSERT INTO t1 VALUES ('E4','Don',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E5','Ed',13,'Akron');
|
|
INSERT INTO t2 VALUES ('P1','MXSS','Design',10000,'Deale');
|
|
INSERT INTO t2 VALUES ('P2','CALM','Code',30000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P3','SDP','Test',30000,'Tampa');
|
|
INSERT INTO t2 VALUES ('P4','SDP','Design',20000,'Deale');
|
|
INSERT INTO t2 VALUES ('P5','IRM','Test',10000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P6','PAYR','Design',50000,'Deale');
|
|
INSERT INTO t3 VALUES ('E1','P1',40);
|
|
INSERT INTO t3 VALUES ('E1','P2',20);
|
|
INSERT INTO t3 VALUES ('E1','P3',80);
|
|
INSERT INTO t3 VALUES ('E1','P4',20);
|
|
INSERT INTO t3 VALUES ('E1','P5',12);
|
|
INSERT INTO t3 VALUES ('E1','P6',12);
|
|
INSERT INTO t3 VALUES ('E2','P1',40);
|
|
INSERT INTO t3 VALUES ('E2','P2',80);
|
|
INSERT INTO t3 VALUES ('E3','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P4',40);
|
|
INSERT INTO t3 VALUES ('E4','P5',80);
|
|
CREATE UNIQUE INDEX t1_IDX ON t1(EMPNUM);
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL eq_ref t1_IDX t1_IDX 3 test.t3.EMPNUM 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL eq_ref t1_IDX t1_IDX 3 test.t3.EMPNUM 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL eq_ref t1_IDX t1_IDX 3 test.t3.EMPNUM 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
DEALLOCATE PREPARE stmt;
|
|
DROP INDEX t1_IDX ON t1;
|
|
CREATE INDEX t1_IDX ON t1(EMPNUM);
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ref t1_IDX t1_IDX 3 test.t3.EMPNUM 2 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ref t1_IDX t1_IDX 3 test.t3.EMPNUM 2 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ref t1_IDX t1_IDX 3 test.t3.EMPNUM 2 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
DEALLOCATE PREPARE stmt;
|
|
DROP INDEX t1_IDX ON t1;
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 5 20.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 5 20.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 12 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 5 20.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`EMPNAME` AS `EMPNAME` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where ((`test`.`t1`.`EMPNUM` = `test`.`t3`.`EMPNUM`) and (`test`.`t3`.`PNUM` = `test`.`t2`.`PNUM`) and (`test`.`t2`.`PTYPE` = 'Design'))
|
|
DEALLOCATE PREPARE stmt;
|
|
DROP TABLE t1, t2, t3;
|
|
#
|
|
# BUG#45221 Query SELECT pk FROM C WHERE pk IN (SELECT int_key) failing
|
|
#
|
|
CREATE TABLE t1 (
|
|
i1_key INT,
|
|
i2 INT,
|
|
i3 INT,
|
|
KEY i1_index (i1_key)
|
|
);
|
|
INSERT INTO t1 VALUES (9,1,2), (9,2,1);
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL,
|
|
i1 INT,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
INSERT INTO t2 VALUES (9,1);
|
|
SELECT pk
|
|
FROM t2
|
|
WHERE
|
|
pk IN (
|
|
SELECT i1_key
|
|
FROM t1
|
|
WHERE t1.i2 < t1.i3 XOR t2.i1 > 1
|
|
ORDER BY t1.i2 desc);
|
|
pk
|
|
9
|
|
DROP TABLE t1,t2;
|
|
# BUG#50361 Doublenested noncorrelated subquery with FirstMatch and join cache wrong result
|
|
#
|
|
CREATE TABLE t1(
|
|
id INTEGER
|
|
);
|
|
INSERT INTO t1 VALUES(10),(20);
|
|
create table t2 select * from t1;
|
|
create table t3 select * from t1;
|
|
SELECT *
|
|
FROM t1
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t2
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t3));
|
|
id
|
|
10
|
|
20
|
|
explain SELECT *
|
|
FROM t1
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t2
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t3));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where true
|
|
delete from t2;
|
|
delete from t3;
|
|
INSERT INTO t1 VALUES(30),(40),(50),(60),(70),(80),(90);
|
|
insert into t2 select * from t1;
|
|
insert into t3 select * from t1;
|
|
create table t4 select * from t1;
|
|
SELECT *
|
|
FROM t1
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t2
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t3
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t4)));
|
|
id
|
|
10
|
|
20
|
|
30
|
|
40
|
|
50
|
|
60
|
|
70
|
|
80
|
|
90
|
|
explain SELECT *
|
|
FROM t1
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t2
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t3
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t4)));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 9 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 9 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 9 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 9 100.00 Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3` join `test`.`t4`) where true
|
|
SELECT *
|
|
FROM t1
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t1
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t1
|
|
WHERE 1 IN(SELECT 1
|
|
FROM t1)));
|
|
id
|
|
10
|
|
20
|
|
30
|
|
40
|
|
50
|
|
60
|
|
70
|
|
80
|
|
90
|
|
drop table t1,t2,t3,t4;
|
|
#
|
|
# Bug#53236 Segfault in DTCollation::set(DTCollation&)
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_varchar VARCHAR(1),
|
|
PRIMARY KEY (pk)
|
|
)
|
|
;
|
|
INSERT INTO t1 (col_varchar)
|
|
VALUES
|
|
('w'),
|
|
('m')
|
|
;
|
|
SELECT table1.pk
|
|
FROM ( t1 AS table1 JOIN t1 AS table2 ON (table1.col_varchar =
|
|
table2.col_varchar) )
|
|
WHERE ( 1, 2 ) IN ( SELECT SUBQUERY1_t1.pk AS SUBQUERY1_field1,
|
|
SUBQUERY1_t1.pk AS SUBQUERY1_field2
|
|
FROM ( t1 AS SUBQUERY1_t1 JOIN t1 AS SUBQUERY1_t2
|
|
ON (SUBQUERY1_t2.col_varchar =
|
|
SUBQUERY1_t1.col_varchar) ) )
|
|
;
|
|
pk
|
|
drop table t1;
|
|
#
|
|
# BUG#53298 "wrong result with semijoin (no semijoin strategy chosen)"
|
|
#
|
|
create table t1 (uid int, fid int);
|
|
insert into t1 values (1,1), (3,1);
|
|
create table t2 (uid int, name varchar(128));
|
|
insert into t2 values (1, "A"), (2, "B");
|
|
create table t3 (uid int, fid int, index(uid));
|
|
insert into t3 values (1,3), (1,3);
|
|
create table t4 (uid int);
|
|
insert into t4 values (3);
|
|
explain select t2.uid from t2, t1
|
|
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
|
|
and t2.uid=t1.fid;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t3 NULL ref uid uid 5 const 1 50.00 Using where
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`uid` AS `uid` from `test`.`t2` join `test`.`t1` semi join (`test`.`t4` join `test`.`t3`) where ((`test`.`t3`.`fid` = `test`.`t4`.`uid`) and (`test`.`t1`.`uid` = `test`.`t4`.`uid`) and (`test`.`t3`.`uid` = 1) and (`test`.`t2`.`uid` = `test`.`t1`.`fid`))
|
|
select t2.uid from t2, t1
|
|
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
|
|
and t2.uid=t1.fid;
|
|
uid
|
|
1
|
|
drop table t1,t2,t3,t4;
|
|
CREATE TABLE t1 (
|
|
pk int,
|
|
a varchar(1),
|
|
b varchar(4),
|
|
c varchar(4),
|
|
d varchar(4),
|
|
PRIMARY KEY (pk)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES (1,'o','ffff','ffff','ffoo'),(2,'f','ffff','ffff','ffff');
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii'),(2,'f','ffff','ffff','ffff');
|
|
EXPLAIN SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
|
pk
|
|
2
|
|
SELECT pk FROM t1 WHERE (b,c,d) IN (SELECT b,c,d FROM t2 WHERE pk > 0);
|
|
pk
|
|
2
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (f1 INT, f2 DECIMAL(5,3)) ENGINE=MyISAM;
|
|
INSERT INTO t1 (f1, f2) VALUES (1, 1.789);
|
|
INSERT INTO t1 (f1, f2) VALUES (13, 1.454);
|
|
INSERT INTO t1 (f1, f2) VALUES (10, 1.668);
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUES (1, 1.789);
|
|
INSERT INTO t2 VALUES (13, 1.454);
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE (f1,f2) IN (SELECT f1,f2 FROM t2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`f2` = `test`.`t2`.`f2`) and (`test`.`t1`.`f1` = `test`.`t2`.`f1`))
|
|
SELECT COUNT(*) FROM t1 WHERE (f1,f2) IN (SELECT f1,f2 FROM t2);
|
|
COUNT(*)
|
|
2
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
ID int(11) NOT NULL auto_increment,
|
|
Name char(35) NOT NULL default '',
|
|
Country char(3) NOT NULL default '',
|
|
Population int(11) NOT NULL default '0',
|
|
PRIMARY KEY (ID),
|
|
INDEX (Population),
|
|
INDEX (Country)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
CREATE TABLE t2 (
|
|
Code char(3) NOT NULL default '',
|
|
Name char(52) NOT NULL default '',
|
|
SurfaceArea float(10,2) NOT NULL default '0.00',
|
|
Population int(11) NOT NULL default '0',
|
|
Capital int(11) default NULL,
|
|
PRIMARY KEY (Code),
|
|
UNIQUE INDEX (Name),
|
|
INDEX (Population)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Specifying number of digits for floating point data types is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
CREATE TABLE t3 (
|
|
Country char(3) NOT NULL default '',
|
|
Language char(30) NOT NULL default '',
|
|
Percentage float(3,1) NOT NULL default '0.0',
|
|
PRIMARY KEY (Country, Language),
|
|
INDEX (Percentage)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Specifying number of digits for floating point data types is deprecated and will be removed in a future release.
|
|
EXPLAIN SELECT Name FROM t2
|
|
WHERE t2.Code IN (SELECT Country FROM t1 WHERE Population > 5000000)
|
|
AND
|
|
t2.Code IN (SELECT Country FROM t3
|
|
WHERE Language='English' AND Percentage > 10 AND
|
|
t2.Population > 100000);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL PRIMARY,Percentage NULL NULL NULL 22 9.55 Using where
|
|
1 SIMPLE t1 NULL ref Population,Country Country 12 test.t3.Country 3 3.33 Using where; LooseScan
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY,Population PRIMARY 12 test.t3.Country 1 75.00 Using where
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t2.Population' of SELECT #3 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`Name` AS `Name` from `test`.`t3` join `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t1`.`Country` = `test`.`t3`.`Country`) and (`test`.`t2`.`Code` = `test`.`t3`.`Country`) and (`test`.`t3`.`Language` = 'English') and (`test`.`t3`.`Percentage` > 10) and (`test`.`t2`.`Population` > 100000) and (`test`.`t1`.`Population` > 5000000))
|
|
EXPLAIN FORMAT=JSON SELECT Name FROM t2
|
|
WHERE t2.Code IN (SELECT Country FROM t1 WHERE Population > 5000000)
|
|
AND
|
|
t2.Code IN (SELECT Country FROM t3
|
|
WHERE Language='English' AND Percentage > 10 AND
|
|
t2.Population > 100000);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "5.18"
|
|
},
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "t3",
|
|
"access_type": "ALL",
|
|
"possible_keys": [
|
|
"PRIMARY",
|
|
"Percentage"
|
|
],
|
|
"rows_examined_per_scan": 22,
|
|
"rows_produced_per_join": 2,
|
|
"filtered": "9.55",
|
|
"cost_info": {
|
|
"read_cost": "2.67",
|
|
"eval_cost": "0.21",
|
|
"prefix_cost": "2.88",
|
|
"data_read_per_join": "302"
|
|
},
|
|
"used_columns": [
|
|
"Country",
|
|
"Language",
|
|
"Percentage"
|
|
],
|
|
"attached_condition": "((`test`.`t3`.`Language` = 'English') and (`test`.`t3`.`Percentage` > 10))"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t1",
|
|
"access_type": "ref",
|
|
"possible_keys": [
|
|
"Population",
|
|
"Country"
|
|
],
|
|
"key": "Country",
|
|
"used_key_parts": [
|
|
"Country"
|
|
],
|
|
"key_length": "12",
|
|
"ref": [
|
|
"test.t3.Country"
|
|
],
|
|
"rows_examined_per_scan": 3,
|
|
"rows_produced_per_join": 0,
|
|
"filtered": "3.33",
|
|
"loosescan": true,
|
|
"cost_info": {
|
|
"read_cost": "1.57",
|
|
"eval_cost": "0.02",
|
|
"prefix_cost": "5.14",
|
|
"data_read_per_join": "37"
|
|
},
|
|
"used_columns": [
|
|
"Country",
|
|
"Population"
|
|
],
|
|
"attached_condition": "(`test`.`t1`.`Population` > 5000000)"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t2",
|
|
"access_type": "eq_ref",
|
|
"possible_keys": [
|
|
"PRIMARY",
|
|
"Population"
|
|
],
|
|
"key": "PRIMARY",
|
|
"used_key_parts": [
|
|
"Code"
|
|
],
|
|
"key_length": "12",
|
|
"ref": [
|
|
"test.t3.Country"
|
|
],
|
|
"rows_examined_per_scan": 1,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "75.00",
|
|
"cost_info": {
|
|
"read_cost": "0.03",
|
|
"eval_cost": "0.16",
|
|
"prefix_cost": "5.19",
|
|
"data_read_per_join": "377"
|
|
},
|
|
"used_columns": [
|
|
"Code",
|
|
"Name",
|
|
"Population"
|
|
],
|
|
"attached_condition": "(`test`.`t2`.`Population` > 100000)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t2.Population' of SELECT #3 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`Name` AS `Name` from `test`.`t3` join `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t1`.`Country` = `test`.`t3`.`Country`) and (`test`.`t2`.`Code` = `test`.`t3`.`Country`) and (`test`.`t3`.`Language` = 'English') and (`test`.`t3`.`Percentage` > 10) and (`test`.`t2`.`Population` > 100000) and (`test`.`t1`.`Population` > 5000000))
|
|
DROP TABLE t1,t2,t3;
|
|
CREATE TABLE t1 (
|
|
Code char(3) NOT NULL DEFAULT '',
|
|
Name char(52) NOT NULL DEFAULT '',
|
|
Continent enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL DEFAULT 'Asia',
|
|
Region char(26) NOT NULL DEFAULT '',
|
|
SurfaceArea float(10,2) NOT NULL DEFAULT '0.00',
|
|
IndepYear smallint(6) DEFAULT NULL,
|
|
Population int(11) NOT NULL DEFAULT '0',
|
|
LifeExpectancy float(3,1) DEFAULT NULL,
|
|
GNP float(10,2) DEFAULT NULL,
|
|
GNPOld float(10,2) DEFAULT NULL,
|
|
LocalName char(45) NOT NULL DEFAULT '',
|
|
GovernmentForm char(45) NOT NULL DEFAULT '',
|
|
HeadOfState char(60) DEFAULT NULL,
|
|
Capital int(11) DEFAULT NULL,
|
|
Code2 char(2) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (Code)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Specifying number of digits for floating point data types is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Specifying number of digits for floating point data types is deprecated and will be removed in a future release.
|
|
Warning 1681 Specifying number of digits for floating point data types is deprecated and will be removed in a future release.
|
|
Warning 1681 Specifying number of digits for floating point data types is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
CREATE TABLE t2 (
|
|
ID int(11) NOT NULL AUTO_INCREMENT,
|
|
Name char(35) NOT NULL DEFAULT '',
|
|
CountryCode char(3) NOT NULL DEFAULT '',
|
|
District char(20) NOT NULL DEFAULT '',
|
|
Population int(11) NOT NULL DEFAULT '0',
|
|
PRIMARY KEY (ID),
|
|
KEY CountryCode (CountryCode)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
set names latin1;
|
|
Fill the table with test data
|
|
This must not use LooseScan:
|
|
EXPLAIN SELECT Name FROM t1
|
|
WHERE t1.Code IN (
|
|
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL CountryCode NULL NULL NULL 545 33.33 Using where; Start temporary
|
|
1 SIMPLE t1 NULL eq_ref PRIMARY PRIMARY 12 test.t2.CountryCode 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`Name` AS `Name` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`Code` = `test`.`t2`.`CountryCode`) and (`test`.`t2`.`Population` > 5000000))
|
|
SELECT Name FROM t1
|
|
WHERE t1.Code IN (
|
|
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
|
|
Name
|
|
Austria
|
|
Canada
|
|
China
|
|
Czech Republic
|
|
drop table t1, t2;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4);
|
|
create table t1 (a int, b int, key(a));
|
|
insert into t1 select a,a from t0;
|
|
create table t2 (a int, b int, primary key(a));
|
|
insert into t2 select * from t1;
|
|
Table t2, unlike table t1, should be displayed as pulled out
|
|
explain select * from t0
|
|
where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
|
|
t1.b=t2.b);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL PRIMARY NULL NULL NULL 5 100.00 NULL
|
|
1 SIMPLE t1 NULL ref a a 5 test.t2.a 1 20.00 Using where; LooseScan
|
|
1 SIMPLE t0 NULL ALL NULL NULL NULL NULL 5 20.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t0.a' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`t0`.`a` AS `a` from `test`.`t2` join `test`.`t0` semi join (`test`.`t1`) where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t0`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`b` = `test`.`t2`.`b`))
|
|
update t1 set a=3, b=11 where a=4;
|
|
update t2 set b=11 where a=3;
|
|
create temporary table tmp select * from t0 where t0.a in
|
|
(select t1.a from t1, t2 where t2.a=t0.a and t1.b=t2.b);
|
|
create temporary table tmp_as_ref (a int);
|
|
insert into tmp_as_ref values(0),(1),(2),(3);
|
|
select * from tmp;
|
|
a
|
|
0
|
|
1
|
|
2
|
|
3
|
|
drop table t0, t1, t2, tmp, tmp_as_ref;
|
|
CREATE TABLE t1 (
|
|
id int(11) NOT NULL,
|
|
PRIMARY KEY (id));
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
CREATE TABLE t2 (
|
|
id int(11) NOT NULL,
|
|
fid int(11) NOT NULL,
|
|
PRIMARY KEY (id));
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
insert into t1 values(1);
|
|
insert into t2 values(1,7503),(2,1);
|
|
explain select count(*)
|
|
from t1
|
|
where fid IN (select fid from t2 where (id between 7502 and 8420) order by fid );
|
|
ERROR 42S22: Unknown column 'fid' in 'IN/ALL/ANY subquery'
|
|
drop table t1, t2;
|
|
create table t1 (a int, b int, key (a), key (b));
|
|
insert into t1 values (2,4),(2,4),(2,4);
|
|
select t1.a from t1
|
|
where
|
|
t1.a in (select 1 from t1 where t1.a in (select 1 from t1) group by t1.a);
|
|
a
|
|
drop table t1;
|
|
create table t1(a int,b int,key(a),key(b));
|
|
insert into t1 values (1,1),(2,2),(3,3);
|
|
select 1 from t1
|
|
where t1.a not in (select 1 from t1
|
|
where t1.a in (select 1 from t1)
|
|
group by t1.b);
|
|
1
|
|
1
|
|
1
|
|
drop table t1;
|
|
CREATE TABLE t1
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
EMPNAME CHAR(20),
|
|
GRADE DECIMAL(4),
|
|
CITY CHAR(15));
|
|
CREATE TABLE t2
|
|
(PNUM CHAR(3) NOT NULL,
|
|
PNAME CHAR(20),
|
|
PTYPE CHAR(6),
|
|
BUDGET DECIMAL(9),
|
|
CITY CHAR(15));
|
|
CREATE TABLE t3
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
PNUM CHAR(3) NOT NULL,
|
|
HOURS DECIMAL(5));
|
|
INSERT INTO t1 VALUES ('E1','Alice',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E2','Betty',10,'Vienna');
|
|
INSERT INTO t1 VALUES ('E3','Carmen',13,'Vienna');
|
|
INSERT INTO t1 VALUES ('E4','Don',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E5','Ed',13,'Akron');
|
|
INSERT INTO t2 VALUES ('P1','MXSS','Design',10000,'Deale');
|
|
INSERT INTO t2 VALUES ('P2','CALM','Code',30000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P3','SDP','Test',30000,'Tampa');
|
|
INSERT INTO t2 VALUES ('P4','SDP','Design',20000,'Deale');
|
|
INSERT INTO t2 VALUES ('P5','IRM','Test',10000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P6','PAYR','Design',50000,'Deale');
|
|
INSERT INTO t3 VALUES ('E1','P1',40);
|
|
INSERT INTO t3 VALUES ('E1','P2',20);
|
|
INSERT INTO t3 VALUES ('E1','P3',80);
|
|
INSERT INTO t3 VALUES ('E1','P4',20);
|
|
INSERT INTO t3 VALUES ('E1','P5',12);
|
|
INSERT INTO t3 VALUES ('E1','P6',12);
|
|
INSERT INTO t3 VALUES ('E2','P1',40);
|
|
INSERT INTO t3 VALUES ('E2','P2',80);
|
|
INSERT INTO t3 VALUES ('E3','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P4',40);
|
|
INSERT INTO t3 VALUES ('E4','P5',80);
|
|
SELECT * FROM t1;
|
|
EMPNUM EMPNAME GRADE CITY
|
|
E1 Alice 12 Deale
|
|
E2 Betty 10 Vienna
|
|
E3 Carmen 13 Vienna
|
|
E4 Don 12 Deale
|
|
E5 Ed 13 Akron
|
|
CREATE UNIQUE INDEX t1_IDX ON t1(EMPNUM);
|
|
SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
EMPNAME
|
|
Alice
|
|
Betty
|
|
Don
|
|
DROP INDEX t1_IDX ON t1;
|
|
CREATE INDEX t1_IDX ON t1(EMPNUM);
|
|
SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
EMPNAME
|
|
Alice
|
|
Betty
|
|
Don
|
|
DROP INDEX t1_IDX ON t1;
|
|
SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
EMPNAME
|
|
Alice
|
|
Betty
|
|
Don
|
|
DROP TABLE t1, t2, t3;
|
|
CREATE TABLE t1 (f1 INT NOT NULL);
|
|
CREATE VIEW v1 (a) AS SELECT f1 IN (SELECT f1 FROM t1) FROM t1;
|
|
SELECT * FROM v1;
|
|
a
|
|
drop view v1;
|
|
drop table t1;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1(a int, b int);
|
|
insert into t1 values (0,0),(1,1),(2,2);
|
|
create table t2 as select * from t1;
|
|
create table t3 (pk int, a int, primary key(pk));
|
|
insert into t3 select a,a from t0;
|
|
explain
|
|
select * from t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t3));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 NULL
|
|
1 SIMPLE t3 NULL eq_ref PRIMARY PRIMARY 4 test.t1.a 1 100.00 Using index
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 3 100.00 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` left join (`test`.`t3` join `test`.`t2`) on(((`test`.`t3`.`pk` = `test`.`t1`.`a`) and (`test`.`t2`.`a` = `test`.`t1`.`a`))) where true
|
|
drop table t0, t1, t2, t3;
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 (a int) as select A.a + 10 *(B.a + 10*C.a) as a from t0 A, t0 B, t0 C;
|
|
create table t2 (id int, a int, primary key(id), key(a)) charset utf8mb4 as select a as id, a as a from t1;
|
|
show create table t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL,
|
|
`a` int(11) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
set @a=0;
|
|
create table t3 as select * from t2 limit 0;
|
|
insert into t3 select @a:=@a+1, t2.a from t2, t0;
|
|
Warnings:
|
|
Warning 1287 Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'.
|
|
insert into t3 select @a:=@a+1, t2.a from t2, t0;
|
|
Warnings:
|
|
Warning 1287 Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'.
|
|
insert into t3 select @a:=@a+1, t2.a from t2, t0;
|
|
Warnings:
|
|
Warning 1287 Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'.
|
|
alter table t3 add primary key(id), add key(a);
|
|
The following must use loose index scan over t3, key a:
|
|
explain select count(a) from t2 where a in ( SELECT a FROM t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL index a a 5 NULL 30000 3.33 Using where; Using index; LooseScan
|
|
1 SIMPLE t2 NULL ref a a 5 test.t3.a 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select count(`test`.`t2`.`a`) AS `count(a)` from `test`.`t2` semi join (`test`.`t3`) where (`test`.`t2`.`a` = `test`.`t3`.`a`)
|
|
select count(a) from t2 where a in ( SELECT a FROM t3);
|
|
count(a)
|
|
1000
|
|
drop table t0,t1,t2,t3;
|
|
#
|
|
# Bug#33062: subquery in stored routine cause crash
|
|
#
|
|
CREATE TABLE t1(a INT);
|
|
CREATE TABLE t2(c INT);
|
|
CREATE PROCEDURE p1(v1 int)
|
|
BEGIN
|
|
SELECT 1 FROM t1 WHERE a = v1 AND a IN (SELECT c FROM t2);
|
|
END
|
|
//
|
|
CREATE PROCEDURE p2(v1 int)
|
|
BEGIN
|
|
SELECT 1 FROM t1 WHERE a IN (SELECT c FROM t2);
|
|
END
|
|
//
|
|
CREATE PROCEDURE p3(v1 int)
|
|
BEGIN
|
|
SELECT 1
|
|
FROM
|
|
t1 t01,t1 t02,t1 t03,t1 t04,t1 t05,t1 t06,t1 t07,t1 t08,
|
|
t1 t09,t1 t10,t1 t11,t1 t12,t1 t13,t1 t14,t1 t15,t1 t16,
|
|
t1 t17,t1 t18,t1 t19,t1 t20,t1 t21,t1 t22,t1 t23,t1 t24,
|
|
t1 t25,t1 t26,t1 t27,t1 t28,t1 t29,t1 t30,t1 t31,t1 t32,
|
|
t1 t33,t1 t34,t1 t35,t1 t36,t1 t37,t1 t38,t1 t39,t1 t40,
|
|
t1 t41,t1 t42,t1 t43,t1 t44,t1 t45,t1 t46,t1 t47,t1 t48,
|
|
t1 t49,t1 t50,t1 t51,t1 t52,t1 t53,t1 t54,t1 t55,t1 t56,
|
|
t1 t57,t1 t58,t1 t59,t1 t60
|
|
WHERE t01.a IN (SELECT c FROM t2);
|
|
END
|
|
//
|
|
CREATE PROCEDURE p4(v1 int)
|
|
BEGIN
|
|
SELECT 1
|
|
FROM
|
|
t1 t01,t1 t02,t1 t03,t1 t04,t1 t05,t1 t06,t1 t07,t1 t08,
|
|
t1 t09,t1 t10,t1 t11,t1 t12,t1 t13,t1 t14,t1 t15,t1 t16,
|
|
t1 t17,t1 t18,t1 t19,t1 t20,t1 t21,t1 t22,t1 t23,t1 t24,
|
|
t1 t25,t1 t26,t1 t27,t1 t28,t1 t29,t1 t30,t1 t31,t1 t32,
|
|
t1 t33,t1 t34,t1 t35,t1 t36,t1 t37,t1 t38,t1 t39,t1 t40,
|
|
t1 t41,t1 t42,t1 t43,t1 t44,t1 t45,t1 t46,t1 t47,t1 t48,
|
|
t1 t49,t1 t50,t1 t51,t1 t52,t1 t53,t1 t54,t1 t55,t1 t56,
|
|
t1 t57,t1 t58,t1 t59,t1 t60
|
|
WHERE t01.a = v1 AND t01.a IN (SELECT c FROM t2);
|
|
END
|
|
//
|
|
CALL p1(1);
|
|
1
|
|
CALL p2(1);
|
|
1
|
|
CALL p3(1);
|
|
1
|
|
CALL p4(1);
|
|
1
|
|
DROP TABLE t1, t2;
|
|
DROP PROCEDURE p1;
|
|
DROP PROCEDURE p2;
|
|
DROP PROCEDURE p3;
|
|
DROP PROCEDURE p4;
|
|
#
|
|
# Bug#48213 Materialized subselect crashes if using GEOMETRY type
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int,
|
|
a varchar(1),
|
|
b varchar(4),
|
|
c tinyblob,
|
|
d blob,
|
|
e mediumblob,
|
|
f longblob,
|
|
g tinytext,
|
|
h text,
|
|
i mediumtext,
|
|
j longtext,
|
|
k geometry,
|
|
PRIMARY KEY (pk)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES (1,'o','ffff','ffff','ffoo','ffff','ffff','ffff','ffff','ffff','ffff',ST_GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))')), (2,'f','ffff','ffff','ffff', 'ffff','ffff','ffff','ffff','ffff','ffff',ST_GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'));
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii','iiii','ffff','ffff','ffff','ffff','ffff',ST_GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))')), (2,'f','ffff','ffff','ffff','ffff','ffff','ffff','ffff','ffff','ffff',ST_GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'));
|
|
EXPLAIN SELECT pk FROM t1 WHERE (a, b) IN (SELECT a, b FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (a, b) IN (SELECT a, b FROM t2 WHERE pk > 0);
|
|
pk
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, c) IN (SELECT b, c FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`c` = `test`.`t2`.`c`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, c) IN (SELECT b, c FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, d) IN (SELECT b, d FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`d` = `test`.`t2`.`d`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, d) IN (SELECT b, d FROM t2 WHERE pk > 0);
|
|
pk
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, e) IN (SELECT b, e FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`e` = `test`.`t2`.`e`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, e) IN (SELECT b, e FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, f) IN (SELECT b, f FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`f` = `test`.`t2`.`f`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, f) IN (SELECT b, f FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, g) IN (SELECT b, g FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`g` = `test`.`t2`.`g`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, g) IN (SELECT b, g FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, h) IN (SELECT b, h FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`h` = `test`.`t2`.`h`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, h) IN (SELECT b, h FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, i) IN (SELECT b, i FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, i) IN (SELECT b, i FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, j) IN (SELECT b, j FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`j` = `test`.`t2`.`j`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, j) IN (SELECT b, j FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
EXPLAIN SELECT pk FROM t1 WHERE (b, k) IN (SELECT b, k FROM t2 WHERE pk > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`k` = `test`.`t2`.`k`) and (`test`.`t1`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`pk` > 0))
|
|
SELECT pk FROM t1 WHERE (b, k) IN (SELECT b, k FROM t2 WHERE pk > 0);
|
|
pk
|
|
1
|
|
2
|
|
DROP TABLE t1, t2;
|
|
# End of Bug#48213
|
|
#
|
|
# BUG#53060: LooseScan semijoin strategy does not return all rows
|
|
#
|
|
CREATE TABLE t1 (i INTEGER);
|
|
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
|
CREATE TABLE t2 (i INTEGER, j INTEGER, KEY k(i, j));
|
|
INSERT INTO t2 VALUES (1, 0), (1, 1), (2, 0), (2, 1);
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (i) IN (SELECT i FROM t2 where j > 0);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL index k k 10 NULL 4 33.33 Using where; Using index; LooseScan
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 5 20.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and (`test`.`t2`.`j` > 0))
|
|
SELECT * FROM t1 WHERE (i) IN (SELECT i FROM t2 where j > 0);
|
|
i
|
|
1
|
|
2
|
|
DROP TABLE t1, t2;
|
|
# End of BUG#53060
|
|
#
|
|
# Bug#53305 "Duplicate weedout + join buffer (join cache --level=7,8) loses rows"
|
|
#
|
|
create table t1 (uid int, fid int, index(uid));
|
|
insert into t1 values
|
|
(1,1), (1,2), (1,3), (1,4),
|
|
(2,5), (2,6), (2,7), (2,8),
|
|
(3,1), (3,2), (3,9);
|
|
create table t2 (uid int primary key, name varchar(128), index(name));
|
|
insert into t2 values
|
|
(1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
|
|
(6, "F"), (7, "G"), (8, "H"), (9, "I");
|
|
create table t3 (uid int, fid int, index(uid));
|
|
insert into t3 values
|
|
(1,1), (1,2), (1,3),(1,4),
|
|
(2,5), (2,6), (2,7), (2,8),
|
|
(3,1), (3,2), (3,9);
|
|
create table t4 (uid int primary key, name varchar(128), index(name));
|
|
insert into t4 values
|
|
(1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
|
|
(6, "F"), (7, "G"), (8, "H"), (9, "I");
|
|
explain select name from t2, t1
|
|
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
|
|
and t2.uid=t1.fid;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ref uid uid 5 const 4 100.00 Using where; Start temporary
|
|
1 SIMPLE t4 NULL eq_ref PRIMARY PRIMARY 4 test.t3.fid 1 100.00 Using index
|
|
1 SIMPLE t1 NULL ref uid uid 5 test.t3.fid 2 100.00 Using where; End temporary
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY PRIMARY 4 test.t1.fid 1 100.00 NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`name` AS `name` from `test`.`t4` join `test`.`t2` join `test`.`t1` semi join (`test`.`t3`) where ((`test`.`t4`.`uid` = `test`.`t3`.`fid`) and (`test`.`t1`.`uid` = `test`.`t3`.`fid`) and (`test`.`t3`.`uid` = 1) and (`test`.`t2`.`uid` = `test`.`t1`.`fid`))
|
|
select name from t2, t1
|
|
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
|
|
and t2.uid=t1.fid;
|
|
name
|
|
A
|
|
A
|
|
B
|
|
B
|
|
C
|
|
D
|
|
E
|
|
F
|
|
G
|
|
H
|
|
I
|
|
drop table t1,t2,t3,t4;
|
|
#
|
|
# Bug#43768 Prepared query with nested subqueries core dump on second execution
|
|
#
|
|
CREATE TABLE t1 (
|
|
id INT PRIMARY KEY,
|
|
partner_id VARCHAR(35)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES
|
|
(1, 'partner1'), (2, 'partner2'),
|
|
(3, 'partner3'), (4, 'partner4');
|
|
CREATE TABLE t2 (
|
|
id INT NOT NULL,
|
|
t1_line_id INT,
|
|
article_id VARCHAR(20),
|
|
PRIMARY KEY(id, t1_line_id)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES
|
|
(1, 1, 'sup'), (2, 1, 'sup'),
|
|
(2, 2, 'sup'), (2, 3, 'sup'),
|
|
(2, 4, 'imp'), (3, 1, 'sup'),
|
|
(4, 1, 'sup');
|
|
CREATE TABLE t3 (
|
|
user_id VARCHAR(50),
|
|
article_id VARCHAR(20) NOT NULL,
|
|
PRIMARY KEY(user_id)
|
|
) charset utf8mb4;
|
|
INSERT INTO t3 VALUES('nicke', 'imp');
|
|
EXPLAIN
|
|
SELECT t1.partner_id
|
|
FROM t1
|
|
WHERE t1.id IN (
|
|
SELECT t2.id
|
|
FROM t2
|
|
WHERE article_id IN (
|
|
SELECT article_id FROM t3
|
|
WHERE user_id = 'nicke'
|
|
)
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL system PRIMARY NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL PRIMARY NULL NULL NULL 7 14.29 Using where; Start temporary
|
|
1 SIMPLE t1 NULL eq_ref PRIMARY PRIMARY 4 test.t2.id 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`partner_id` AS `partner_id` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`id` = `test`.`t2`.`id`) and (`test`.`t2`.`article_id` = 'imp'))
|
|
SELECT t1.partner_id
|
|
FROM t1
|
|
WHERE t1.id IN (
|
|
SELECT t2.id
|
|
FROM t2
|
|
WHERE article_id IN (
|
|
SELECT article_id FROM t3
|
|
WHERE user_id = 'nicke'
|
|
)
|
|
);
|
|
partner_id
|
|
partner2
|
|
PREPARE stmt FROM
|
|
'EXPLAIN SELECT t1.partner_id
|
|
FROM t1
|
|
WHERE t1.id IN (
|
|
SELECT t2.id
|
|
FROM t2
|
|
WHERE article_id IN (
|
|
SELECT article_id FROM t3
|
|
WHERE user_id = \'nicke\'
|
|
)
|
|
)';
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL system PRIMARY NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL PRIMARY NULL NULL NULL 7 14.29 Using where; Start temporary
|
|
1 SIMPLE t1 NULL eq_ref PRIMARY PRIMARY 4 test.t2.id 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`partner_id` AS `partner_id` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`id` = `test`.`t2`.`id`) and (`test`.`t2`.`article_id` = 'imp'))
|
|
EXECUTE stmt;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL system PRIMARY NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL ALL PRIMARY NULL NULL NULL 7 14.29 Using where; Start temporary
|
|
1 SIMPLE t1 NULL eq_ref PRIMARY PRIMARY 4 test.t2.id 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`partner_id` AS `partner_id` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t1`.`id` = `test`.`t2`.`id`) and (`test`.`t2`.`article_id` = 'imp'))
|
|
PREPARE stmt FROM
|
|
'SELECT t1.partner_id
|
|
FROM t1
|
|
WHERE t1.id IN (
|
|
SELECT t2.id
|
|
FROM t2
|
|
WHERE article_id IN (
|
|
SELECT article_id FROM t3
|
|
WHERE user_id = \'nicke\'
|
|
)
|
|
)';
|
|
EXECUTE stmt;
|
|
partner_id
|
|
partner2
|
|
EXECUTE stmt;
|
|
partner_id
|
|
partner2
|
|
DROP TABLE t1,t2,t3;
|
|
# End of Bug#43768
|
|
#
|
|
# Bug#53058 - semijoin execution of subquery with outerjoin yields wrong result
|
|
#
|
|
CREATE TABLE t1 (i INTEGER);
|
|
CREATE TABLE t2 (i INTEGER);
|
|
CREATE TABLE t3 (i INTEGER);
|
|
INSERT INTO t1 VALUES (1), (2);
|
|
INSERT INTO t2 VALUES (6);
|
|
INSERT INTO t3 VALUES (1), (2);
|
|
explain SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t3` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t3`.`i`))) where (`test`.`t1`.`i` = `test`.`t3`.`i`)
|
|
SELECT * FROM t1 WHERE (t1.i) IN
|
|
(SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);
|
|
i
|
|
1
|
|
2
|
|
drop table t1,t2,t3;
|
|
#
|
|
# BUG#49453: re-execution of prepared statement with view
|
|
# and semijoin crashes
|
|
#
|
|
CREATE TABLE t1 (city VARCHAR(50), country_id INT);
|
|
CREATE TABLE t2 (country_id INT, country VARCHAR(50));
|
|
INSERT INTO t1 VALUES
|
|
('Batna',2),('Bchar',2),('Skikda',2),('Tafuna',3),('Algeria',2) ;
|
|
INSERT INTO t2 VALUES (2,'Algeria'),(2,'AlgeriaDup'),(3,'XAmerican Samoa');
|
|
CREATE VIEW v1 AS
|
|
SELECT country_id as vf_country_id
|
|
FROM t2
|
|
WHERE LEFT(country,1) = "A";
|
|
PREPARE stmt FROM "
|
|
SELECT city, country_id
|
|
FROM t1
|
|
WHERE country_id IN (SELECT vf_country_id FROM v1);
|
|
";
|
|
|
|
EXECUTE stmt;
|
|
city country_id
|
|
Algeria 2
|
|
Batna 2
|
|
Bchar 2
|
|
Skikda 2
|
|
EXECUTE stmt;
|
|
city country_id
|
|
Algeria 2
|
|
Batna 2
|
|
Bchar 2
|
|
Skikda 2
|
|
DROP TABLE t1,t2;
|
|
DROP VIEW v1;
|
|
#
|
|
# Bug#54437 Extra rows with LEFT JOIN + semijoin (firstmatch
|
|
# and duplicates weedout)
|
|
#
|
|
create table t1 (a int);
|
|
create table t2 (a int);
|
|
create table t3 (a int);
|
|
insert into t1 values(1),(1);
|
|
insert into t2 values(1),(1),(1),(1);
|
|
insert into t3 values(2),(2);
|
|
explain select * from t1 where t1.a in (select t2.a from t2 left join t3 on t2.a=t3.a);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` semi join (`test`.`t2` left join `test`.`t3` on((`test`.`t2`.`a` = `test`.`t3`.`a`))) where (`test`.`t2`.`a` = `test`.`t1`.`a`)
|
|
select * from t1 where t1.a in (select t2.a from t2 left join t3 on t2.a=t3.a);
|
|
a
|
|
1
|
|
1
|
|
drop table t1,t2,t3;
|
|
#
|
|
# Bug#55955: crash in MEMORY engine with IN(LEFT JOIN (JOIN))
|
|
#
|
|
CREATE TABLE t1 (a INT);
|
|
CREATE TABLE t2 (a INT);
|
|
CREATE TABLE t3 (a INT);
|
|
INSERT INTO t1 VALUES(1),(1);
|
|
INSERT INTO t2 VALUES(1),(1);
|
|
INSERT INTO t3 VALUES(2),(2);
|
|
explain SELECT * FROM t1
|
|
WHERE t1.a IN (SELECT t2.a
|
|
FROM t2 LEFT JOIN (t2 AS t2inner, t3) ON t2.a=t3.a);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2inner NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` semi join (`test`.`t2` left join (`test`.`t2` `t2inner` join `test`.`t3`) on((`test`.`t2`.`a` = `test`.`t3`.`a`))) where (`test`.`t1`.`a` = `test`.`t2`.`a`)
|
|
SELECT * FROM t1
|
|
WHERE t1.a IN (SELECT t2.a
|
|
FROM t2 LEFT JOIN (t2 AS t2inner, t3) ON t2.a=t3.a);
|
|
a
|
|
1
|
|
1
|
|
DROP TABLE t1,t2,t3;
|
|
#
|
|
# BUG#52329 - Wrong result: subquery materialization, IN,
|
|
# non-null field followed by nullable
|
|
#
|
|
CREATE TABLE t1 (a1 CHAR(8) NOT NULL, a2 char(8) NOT NULL);
|
|
CREATE TABLE t2a (b1 char(8), b2 char(8));
|
|
CREATE TABLE t2b (b1 CHAR(8), b2 char(8) NOT NULL);
|
|
CREATE TABLE t2c (b1 CHAR(8) NOT NULL, b2 char(8));
|
|
INSERT INTO t1 VALUES ('1 - 12', '2 - 22');
|
|
INSERT INTO t2a VALUES ('1 - 11', '2 - 21'),
|
|
('1 - 11', '2 - 21'),
|
|
('1 - 12', '2 - 22'),
|
|
('1 - 12', '2 - 22'),
|
|
('1 - 13', '2 - 23');
|
|
INSERT INTO t2b SELECT * FROM t2a;
|
|
INSERT INTO t2c SELECT * FROM t2a;
|
|
SELECT * FROM t1
|
|
WHERE (a1, a2) IN (
|
|
SELECT b1, b2 FROM t2c WHERE b1 > '0' GROUP BY b1, b2);
|
|
a1 a2
|
|
1 - 12 2 - 22
|
|
SELECT * FROM t1
|
|
WHERE (a1, a2) IN (
|
|
SELECT b1, b2 FROM t2a WHERE b1 > '0');
|
|
a1 a2
|
|
1 - 12 2 - 22
|
|
SELECT * FROM t1
|
|
WHERE (a1, a2) IN (
|
|
SELECT b1, b2 FROM t2b WHERE b1 > '0');
|
|
a1 a2
|
|
1 - 12 2 - 22
|
|
SELECT * FROM t1
|
|
WHERE (a1, a2) IN (
|
|
SELECT b1, b2 FROM t2c WHERE b1 > '0');
|
|
a1 a2
|
|
1 - 12 2 - 22
|
|
DROP TABLE t1,t2a,t2b,t2c;
|
|
# End BUG#52329
|
|
#
|
|
# Bug#45174: Incorrectly applied equality propagation caused wrong
|
|
# result on a query with a materialized semi-join.
|
|
#
|
|
CREATE TABLE t1 (
|
|
varchar_nokey varchar(1) NOT NULL
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES
|
|
('v'), ('u'), ('n'), ('l'), ('h'), ('u'), ('n'), ('j'), ('k'),
|
|
('e'), ('i'), ('u'), ('n'), ('b'), ('x'), (''), ('q'), ('u');
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL,
|
|
varchar_key varchar(1) NOT NULL,
|
|
varchar_nokey varchar(1) NOT NULL,
|
|
PRIMARY KEY(pk),
|
|
KEY varchar_key(varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES
|
|
(11,'m','m'), (12,'j','j'), (13,'z','z'), (14,'a','a'), (15,'',''),
|
|
(16,'e','e'), (17,'t','t'), (19,'b','b'), (20,'w','w'), (21,'m','m'),
|
|
(23,'',''), (24,'w','w'), (26,'e','e'), (27,'e','e'), (28,'p','p');
|
|
SELECT varchar_nokey
|
|
FROM t1
|
|
WHERE (varchar_nokey, varchar_nokey) IN (SELECT varchar_key, varchar_nokey
|
|
FROM t2
|
|
WHERE varchar_nokey < 'n' XOR pk);
|
|
varchar_nokey
|
|
explain SELECT varchar_nokey
|
|
FROM t1
|
|
WHERE (varchar_nokey, varchar_nokey) IN (SELECT varchar_key, varchar_nokey
|
|
FROM t2
|
|
WHERE varchar_nokey < 'n' XOR pk);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 18 100.00 NULL
|
|
1 SIMPLE t2 NULL ref varchar_key varchar_key 6 test.t1.varchar_nokey 2 6.67 Using where; Start temporary; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`varchar_nokey` AS `varchar_nokey` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`varchar_key` = `test`.`t1`.`varchar_nokey`) and (`test`.`t2`.`varchar_nokey` = `test`.`t1`.`varchar_nokey`) and ((`test`.`t2`.`varchar_nokey` < 'n') xor (0 <> `test`.`t2`.`pk`)))
|
|
DROP TABLE t1, t2;
|
|
# End of the test for bug#45174.
|
|
#
|
|
# Bug#50019: Wrong result for IN-query with materialization
|
|
#
|
|
CREATE TABLE t1(i INT);
|
|
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
|
CREATE TABLE t2(i INT);
|
|
INSERT INTO t2 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
|
CREATE TABLE t3(i INT);
|
|
INSERT INTO t3 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
|
SELECT * FROM t1 WHERE t1.i IN (SELECT t2.i
|
|
FROM t2 JOIN t3
|
|
WHERE t2.i + t3.i = 5);
|
|
i
|
|
4
|
|
3
|
|
2
|
|
1
|
|
explain SELECT * FROM t1 WHERE t1.i IN (SELECT t2.i
|
|
FROM t2 JOIN t3
|
|
WHERE t2.i + t3.i = 5);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 10 100.00 Start temporary
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 10 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 10 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2` join `test`.`t3`) where ((`test`.`t1`.`i` = `test`.`t2`.`i`) and ((`test`.`t2`.`i` + `test`.`t3`.`i`) = 5))
|
|
DROP TABLE t1,t2,t3;
|
|
# End of the test for bug#50019.
|
|
#
|
|
# Bug#52068: Optimizer generates invalid semijoin materialization plan
|
|
#
|
|
CREATE TABLE ot1(a INTEGER);
|
|
INSERT INTO ot1 VALUES(5), (8);
|
|
CREATE TABLE it2(a INTEGER);
|
|
INSERT INTO it2 VALUES(9), (5), (1), (8);
|
|
CREATE TABLE it3(a INTEGER);
|
|
INSERT INTO it3 VALUES(7), (1), (0), (5), (1), (4);
|
|
CREATE TABLE ot4(a INTEGER);
|
|
INSERT INTO ot4 VALUES(1), (3), (5), (7), (9), (7), (3), (1);
|
|
SELECT * FROM ot1,ot4
|
|
WHERE (ot1.a,ot4.a) IN (SELECT it2.a,it3.a
|
|
FROM it2,it3);
|
|
a a
|
|
5 1
|
|
5 1
|
|
5 5
|
|
5 7
|
|
5 7
|
|
8 1
|
|
8 1
|
|
8 5
|
|
8 7
|
|
8 7
|
|
explain SELECT * FROM ot1,ot4
|
|
WHERE (ot1.a,ot4.a) IN (SELECT it2.a,it3.a
|
|
FROM it2,it3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it3 NULL ALL NULL NULL NULL NULL 6 100.00 Start temporary
|
|
1 SIMPLE ot4 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot4`.`a` AS `a` from `test`.`ot1` join `test`.`ot4` semi join (`test`.`it2` join `test`.`it3`) where ((`test`.`ot4`.`a` = `test`.`it3`.`a`) and (`test`.`it2`.`a` = `test`.`ot1`.`a`))
|
|
DROP TABLE IF EXISTS ot1, ot4, it2, it3;
|
|
# End of the test for bug#52068.
|
|
#
|
|
# Bug#57623: subquery within before insert trigger causes crash (sj=on)
|
|
#
|
|
CREATE TABLE ot1(a INT);
|
|
CREATE TABLE ot2(a INT);
|
|
CREATE TABLE ot3(a INT);
|
|
CREATE TABLE it1(a INT);
|
|
INSERT INTO ot1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
|
|
INSERT INTO ot2 VALUES(0),(2),(4),(6);
|
|
INSERT INTO ot3 VALUES(0),(3),(6);
|
|
INSERT INTO it1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
|
|
explain SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 on ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a from it1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 8 100.00 Start temporary
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot3 NULL ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a`,`test`.`ot3`.`a` AS `a` from `test`.`ot1` left join (`test`.`ot2` join `test`.`ot3` semi join (`test`.`it1`)) on(((`test`.`it1`.`a` = `test`.`ot1`.`a`) and (`test`.`ot3`.`a` = `test`.`ot1`.`a`) and (`test`.`ot2`.`a` = `test`.`ot1`.`a`))) where true
|
|
SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 on ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a from it1);
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
prepare s from 'SELECT *
|
|
FROM ot1
|
|
LEFT JOIN
|
|
(ot2 JOIN ot3 on ot2.a=ot3.a)
|
|
ON ot1.a=ot2.a AND ot1.a IN (SELECT a from it1)';
|
|
execute s;
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
execute s;
|
|
a a a
|
|
0 0 0
|
|
1 NULL NULL
|
|
2 NULL NULL
|
|
3 NULL NULL
|
|
4 NULL NULL
|
|
5 NULL NULL
|
|
6 6 6
|
|
7 NULL NULL
|
|
deallocate prepare s;
|
|
DROP TABLE ot1, ot2, ot3, it1;
|
|
# End of the test for bug#57623.
|
|
#
|
|
# Bug#11766739: Crash in tmp_table_param::init() with semijoin=on
|
|
#
|
|
CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM;
|
|
CREATE TABLE t2 (f1 INTEGER, f2 INTEGER) ENGINE=MyISAM;
|
|
INSERT INTO t1 VALUES (1);
|
|
INSERT INTO t2 VALUES (1,1), (2,1);
|
|
EXPLAIN SELECT * FROM t2
|
|
WHERE f2 IN (SELECT t1.f1
|
|
FROM t1 LEFT OUTER JOIN (t2 AS b1 JOIN t2 AS b2 ON TRUE) ON TRUE);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE b1 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE b2 NULL ALL NULL NULL NULL NULL 2 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`f1` AS `f1`,`test`.`t2`.`f2` AS `f2` from `test`.`t2` semi join (`test`.`t1` left join (`test`.`t2` `b1` join `test`.`t2` `b2`) on((true))) where (`test`.`t2`.`f2` = `test`.`t1`.`f1`)
|
|
SELECT * FROM t2
|
|
WHERE f2 IN (SELECT t1.f1
|
|
FROM t1 LEFT OUTER JOIN (t2 AS b1 JOIN t2 AS b2 ON TRUE) ON TRUE);
|
|
f1 f2
|
|
1 1
|
|
2 1
|
|
DROP TABLE t1, t2;
|
|
# End of the test for bug#11766739.
|
|
#
|
|
# Bug#11766642: crash in Item_field::register_field_in_read_map with view
|
|
#
|
|
CREATE TABLE t1(a INT);
|
|
CREATE VIEW v1 AS SELECT a FROM t1;
|
|
INSERT INTO t1 VALUES (0),(1),(2);
|
|
SELECT a FROM t1 WHERE a IN
|
|
(SELECT a XOR a FROM v1)
|
|
ORDER BY a;
|
|
a
|
|
0
|
|
DROP TABLE t1;
|
|
DROP VIEW v1;
|
|
#
|
|
# Bug#12546542 MISSING ROW WHEN USING OPTIMIZER_JOIN_CACHE_LEVEL>=3
|
|
#
|
|
CREATE TABLE t1 (
|
|
f2 varchar(1024)
|
|
);
|
|
INSERT INTO t1 VALUES ('v'),('we');
|
|
CREATE TABLE t2 (
|
|
col_varchar_1024_utf8 varchar(1024) CHARACTER SET utf8 DEFAULT NULL,
|
|
col_int_key int,
|
|
col_int int
|
|
);
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
INSERT INTO t2 VALUES ('we',4,NULL),('v',1305673728,6);
|
|
CREATE TABLE t3 (
|
|
col_int_key int,
|
|
col_int int
|
|
);
|
|
INSERT INTO t3 VALUES (4,4);
|
|
SELECT *
|
|
FROM t1
|
|
WHERE f2 IN (SELECT a1.col_varchar_1024_utf8 AS f2
|
|
FROM t2 AS a1 LEFT JOIN t3 AS a2
|
|
ON a1.col_int_key = a2.col_int_key
|
|
WHERE a1.col_int BETWEEN 1 AND 10 OR a2.col_int IS NOT NULL);
|
|
f2
|
|
v
|
|
we
|
|
DROP TABLE t1,t2,t3;
|
|
#
|
|
# BUG#12616344 - JCL: DIFFERENT RESULT SET AND DIFFERENT AMOUNT
|
|
# OF ROWS WHEN JCL>=3
|
|
#
|
|
CREATE TABLE t1 (col_int_nokey int, col_int_key int, col_varchar_key varchar(1));
|
|
INSERT INTO t1 VALUES (0,4,'c'),(1,6,'u');
|
|
CREATE TABLE t2 (pk int, col_int_nokey int, col_varchar_nokey varchar(1));
|
|
INSERT INTO t2 VALUES (1,4,'b'),(94,6,'u');
|
|
CREATE TABLE t3 (pk int, col_int_nokey int, col_varchar_key varchar(1));
|
|
INSERT INTO t3 VALUES (1,4,'j'),(2,6,'v');
|
|
SELECT table2.col_int_key
|
|
from t3 as table1 join t1 as table2 on table2.col_int_nokey
|
|
where table1.col_int_nokey in
|
|
(
|
|
select subquery2_t2.col_int_nokey
|
|
from t3 as subquery2_t1
|
|
right join
|
|
t2 as subquery2_t2
|
|
join t1 as subquery2_t3
|
|
on subquery2_t3.col_int_key = subquery2_t2.col_int_nokey
|
|
on subquery2_t3.col_varchar_key = subquery2_t2.col_varchar_nokey
|
|
where subquery2_t1.col_varchar_key != table1.col_varchar_key
|
|
or subquery2_t2.pk <= table1.pk
|
|
);
|
|
col_int_key
|
|
6
|
|
6
|
|
DROP TABLE t1,t2,t3;
|
|
#
|
|
# Bug#12608157: ASSERT IN FIELD_LONG::VAL_INT WHEN USING MEMORY ENGINE
|
|
#
|
|
CREATE TABLE t1 (i1 int);
|
|
INSERT INTO t1 VALUES (1);
|
|
CREATE TABLE t2 (i1 int, i2 int) ENGINE=memory;
|
|
INSERT INTO t2 VALUES (1, 2),(7, 3);
|
|
SELECT GRANDPARENT1.i1
|
|
FROM t2 AS GRANDPARENT1
|
|
WHERE GRANDPARENT1.i2
|
|
IN ( SELECT PARENT1.i2
|
|
FROM t2 AS PARENT1 JOIN t1 AS PARENT2 ON (PARENT1.i1 = PARENT2.i1)
|
|
WHERE
|
|
GRANDPARENT1.i1 IN ( SELECT CHILD1.i1 FROM t2 AS CHILD1 )
|
|
ORDER BY PARENT1.i1)
|
|
ORDER BY GRANDPARENT1.i2 ;
|
|
i1
|
|
1
|
|
DROP TABLE t1,t2;
|
|
#
|
|
# Bug#12640083: Same query executed as WHERE subquery gives different
|
|
# results on IN() compare
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_varchar_1024_utf8_key varchar(1024) CHARACTER SET utf8 DEFAULT NULL,
|
|
col_varchar_10_latin1_key varchar(10) DEFAULT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_varchar_1024_utf8_key(col_varchar_1024_utf8_key(333)),
|
|
KEY col_varchar_10_latin1_key(col_varchar_10_latin1_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
INSERT INTO t1 VALUES
|
|
(1, 'a', 'a'),
|
|
(2, 'ab', 'ab'),
|
|
(3, 'abc', 'abc'),
|
|
(4, 'abcd', 'abcd');
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL AUTO_INCREMENT,
|
|
PRIMARY KEY (pk)
|
|
) charset utf8mb4 ENGINE=Innodb;
|
|
CREATE TABLE t3 charset utf8mb4
|
|
SELECT alias1.col_varchar_10_latin1_key
|
|
FROM t1 AS alias1
|
|
LEFT JOIN t1 AS alias2
|
|
JOIN t2 AS alias3
|
|
ON alias2.col_varchar_10_latin1_key
|
|
ON alias1.col_varchar_1024_utf8_key
|
|
WHERE alias1.pk AND alias1.pk < 3 OR alias1.pk AND alias3.pk;
|
|
EXPLAIN SELECT *
|
|
FROM t3
|
|
WHERE col_varchar_10_latin1_key IN (
|
|
SELECT alias1.col_varchar_10_latin1_key
|
|
FROM t1 AS alias1
|
|
LEFT JOIN t1 AS alias2
|
|
JOIN t2 AS alias3
|
|
ON alias2.col_varchar_10_latin1_key
|
|
ON alias1.col_varchar_1024_utf8_key
|
|
WHERE alias1.pk AND alias1.pk < 3 OR alias1.pk AND alias3.pk);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE alias1 NULL ALL PRIMARY,col_varchar_10_latin1_key NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE alias3 NULL index NULL PRIMARY 4 NULL 1 100.00 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE alias2 NULL index NULL col_varchar_10_latin1_key 43 NULL 4 100.00 Using where; Using index; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t3`.`col_varchar_10_latin1_key` AS `col_varchar_10_latin1_key` from `test`.`t3` semi join (`test`.`t1` `alias1` left join (`test`.`t1` `alias2` join `test`.`t2` `alias3`) on(((0 <> `test`.`alias1`.`col_varchar_1024_utf8_key`) and (0 <> `test`.`alias2`.`col_varchar_10_latin1_key`)))) where ((`test`.`alias1`.`col_varchar_10_latin1_key` = `test`.`t3`.`col_varchar_10_latin1_key`) and (((0 <> `test`.`alias1`.`pk`) and (`test`.`alias1`.`pk` < 3)) or ((0 <> `test`.`alias1`.`pk`) and (0 <> `test`.`alias3`.`pk`))))
|
|
SELECT *
|
|
FROM t3
|
|
WHERE col_varchar_10_latin1_key IN (
|
|
SELECT alias1.col_varchar_10_latin1_key
|
|
FROM t1 AS alias1
|
|
LEFT JOIN t1 AS alias2
|
|
JOIN t2 AS alias3
|
|
ON alias2.col_varchar_10_latin1_key
|
|
ON alias1.col_varchar_1024_utf8_key
|
|
WHERE alias1.pk AND alias1.pk < 3 OR alias1.pk AND alias3.pk);
|
|
col_varchar_10_latin1_key
|
|
a
|
|
ab
|
|
DROP TABLE t1, t2, t3;
|
|
# End of the test for bug#12640083.
|
|
#
|
|
# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_int_key int NOT NULL,
|
|
col_varchar_nokey varchar(1) NOT NULL,
|
|
col_varchar_key varchar(1) NOT NULL,
|
|
PRIMARY KEY(pk),
|
|
KEY col_int_key(col_int_key),
|
|
KEY col_varchar_key(col_varchar_key, col_int_key)
|
|
) charset utf8mb4 engine=innodb;
|
|
INSERT INTO t1 VALUES
|
|
(1,7,'a','a'),
|
|
(2,0,'v','v'),
|
|
(3,9,'c','c'),
|
|
(4,3,'m','m'),
|
|
(5,2,'a','a'),
|
|
(6,1,'d','d'),
|
|
(7,8,'y','y'),
|
|
(8,6,'t','t'),
|
|
(11,7,'a','x'),
|
|
(12,0,'v','v'),
|
|
(13,9,'c','c'),
|
|
(14,3,'m','m'),
|
|
(15,2,'a','x'),
|
|
(16,1,'d','d'),
|
|
(17,8,'y','y'),
|
|
(18,6,'t','u'),
|
|
(19,6,'t','u');
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL,
|
|
col_int_key int NOT NULL,
|
|
col_varchar_key varchar(1) NOT NULL,
|
|
PRIMARY KEY(pk),
|
|
KEY col_varchar_key(col_varchar_key, col_int_key)
|
|
) charset utf8mb4 engine=innodb;
|
|
INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES
|
|
(8,7,'c'),
|
|
(11,4,'l'),
|
|
(12,7,'b'),
|
|
(13,0,'c'),
|
|
(14,2,'i'),
|
|
(15,9,'h'),
|
|
(16,4,'q'),
|
|
(17,1,'m'),
|
|
(18,9,'b'),
|
|
(19,2,'e'),
|
|
(20,1,'c'),
|
|
(21,7,'z'),
|
|
(22,4,'l'),
|
|
(23,7,'z'),
|
|
(24,0,'c'),
|
|
(25,2,'i'),
|
|
(26,9,'h'),
|
|
(27,4,'q'),
|
|
(28,0,'a'),
|
|
(29,1,'d');
|
|
EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y
|
|
FROM t1 AS outr
|
|
WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key
|
|
FROM t2 AS innr
|
|
WHERE innr.col_varchar_key = 'a' OR innr.pk = 8)
|
|
AND outr.col_varchar_nokey < 't'
|
|
ORDER BY outr.col_varchar_key, outr.pk;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE innr NULL index PRIMARY,col_varchar_key col_varchar_key 10 NULL 20 55.00 Using where; Using index; Using temporary; Using filesort; LooseScan
|
|
1 SIMPLE outr NULL ref col_varchar_key col_varchar_key 6 test.innr.col_varchar_key 1 33.33 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`outr`.`col_varchar_key` AS `x`,`test`.`outr`.`pk` AS `y` from `test`.`t1` `outr` semi join (`test`.`t2` `innr`) where ((`test`.`outr`.`col_varchar_key` = `test`.`innr`.`col_varchar_key`) and (`test`.`outr`.`col_varchar_nokey` < 't') and ((`test`.`innr`.`col_varchar_key` = 'a') or (`test`.`innr`.`pk` = 8))) order by `test`.`outr`.`col_varchar_key`,`test`.`outr`.`pk`
|
|
SELECT outr.col_varchar_key AS x, outr.pk AS y
|
|
FROM t1 AS outr
|
|
WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key
|
|
FROM t2 AS innr
|
|
WHERE innr.col_varchar_key = 'a' OR innr.pk = 8)
|
|
AND outr.col_varchar_nokey < 't'
|
|
ORDER BY outr.col_varchar_key, outr.pk;
|
|
x y
|
|
a 1
|
|
a 5
|
|
c 3
|
|
c 13
|
|
DROP TABLE t1, t2;
|
|
# End of bug#12603200
|
|
#
|
|
# Bug#12603183: Segfault in hp_movelink
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_varchar_key varchar(1) ,
|
|
col_varchar_nokey varchar(1) ,
|
|
KEY col_varchar_key(col_varchar_key)
|
|
) charset latin1;
|
|
INSERT INTO t1 VALUES
|
|
('i','i'),
|
|
('h','h'),
|
|
('q','q'),
|
|
('a','a'),
|
|
('v','v'),
|
|
('u','u'),
|
|
('s','s'),
|
|
('y','y'),
|
|
('z','z'),
|
|
('h','h'),
|
|
('p','p'),
|
|
('e','e'),
|
|
('i','i'),
|
|
('y','y'),
|
|
('w','w');
|
|
CREATE TABLE t2 (
|
|
col_varchar_nokey varchar(1)
|
|
) charset latin1;
|
|
INSERT INTO t2 VALUES
|
|
('b');
|
|
EXPLAIN SELECT grandparent1.col_varchar_nokey
|
|
FROM t1 AS grandparent1 LEFT JOIN t2 AS grandparent2 USING (col_varchar_nokey)
|
|
WHERE (grandparent1.col_varchar_key) IN
|
|
(SELECT parent1.col_varchar_nokey
|
|
FROM t1 AS parent1
|
|
WHERE parent1.col_varchar_key IN
|
|
(SELECT child1.col_varchar_nokey AS c1
|
|
FROM t1 AS child1 LEFT JOIN t2 AS child2
|
|
ON (child1.col_varchar_key > child2.col_varchar_nokey)));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE child1 NULL ALL NULL NULL NULL NULL 15 100.00 Using where; Start temporary
|
|
1 SIMPLE child2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE parent1 NULL ref col_varchar_key col_varchar_key 4 test.child1.col_varchar_nokey 2 100.00 Using where
|
|
1 SIMPLE grandparent1 NULL ref col_varchar_key col_varchar_key 4 test.parent1.col_varchar_nokey 2 100.00 End temporary
|
|
1 SIMPLE grandparent2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`grandparent1`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t1` `grandparent1` left join `test`.`t2` `grandparent2` on((`test`.`grandparent2`.`col_varchar_nokey` = `test`.`grandparent1`.`col_varchar_nokey`)) semi join (`test`.`t1` `parent1` join `test`.`t1` `child1` left join `test`.`t2` `child2` on((`test`.`child1`.`col_varchar_key` > `test`.`child2`.`col_varchar_nokey`))) where ((`test`.`grandparent1`.`col_varchar_key` = `test`.`parent1`.`col_varchar_nokey`) and (`test`.`parent1`.`col_varchar_key` = `test`.`child1`.`col_varchar_nokey`))
|
|
SELECT grandparent1.col_varchar_nokey
|
|
FROM t1 AS grandparent1 LEFT JOIN t2 AS grandparent2 USING (col_varchar_nokey)
|
|
WHERE (grandparent1.col_varchar_key) IN
|
|
(SELECT parent1.col_varchar_nokey
|
|
FROM t1 AS parent1
|
|
WHERE parent1.col_varchar_key IN
|
|
(SELECT child1.col_varchar_nokey AS c1
|
|
FROM t1 AS child1 LEFT JOIN t2 AS child2
|
|
ON (child1.col_varchar_key > child2.col_varchar_nokey)));
|
|
col_varchar_nokey
|
|
a
|
|
e
|
|
h
|
|
h
|
|
i
|
|
i
|
|
p
|
|
q
|
|
s
|
|
u
|
|
v
|
|
w
|
|
y
|
|
y
|
|
z
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#12603183.
|
|
#
|
|
# Bug#12818569: Diff nr of rows returned when using IN/ALL+subquery
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_key INT NOT NULL,
|
|
col_datetime_key DATETIME NOT NULL,
|
|
col_varchar_key VARCHAR(1) NOT NULL,
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_datetime_key(col_datetime_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES
|
|
(7,'2004-06-06 04:22:12','v'), (0,'2005-11-13 01:12:31','s'),
|
|
(9,'2002-05-04 01:50:00','l'), (3,'2004-10-27 10:28:45','y'),
|
|
(4,'2006-07-22 05:24:23','c'), (2,'2002-05-16 21:34:03','i'),
|
|
(5,'2008-04-17 10:45:30','h'), (3,'2009-04-21 02:58:02','q'),
|
|
(1,'2008-01-11 11:01:51','a'), (3,'1900-01-01 00:00:00','v'),
|
|
(6,'2007-05-17 18:24:57','u'), (7,'2007-08-07 00:00:00','s'),
|
|
(5,'2001-08-28 00:00:00','y'), (1,'2004-04-16 00:27:28','z'),
|
|
(204,'2005-05-03 07:06:22','h'), (224,'2009-03-11 17:09:50','p'),
|
|
(9,'2007-12-08 01:54:28','e'), (5,'2009-07-28 18:19:54','i'),
|
|
(0,'2008-06-08 00:00:00','y'), (3,'2005-02-09 09:20:26','w');
|
|
CREATE TABLE t2 (
|
|
col_varchar_nokey VARCHAR(1) NOT NULL
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES ('v'), ('y'), ('j'), ('c'), ('d'), ('r');
|
|
explain SELECT col_varchar_key
|
|
FROM t1
|
|
WHERE col_varchar_key IN (SELECT col_varchar_nokey
|
|
FROM t2)
|
|
ORDER BY col_datetime_key LIMIT 4;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 6 100.00 Using temporary; Using filesort; Start temporary
|
|
1 SIMPLE t1 NULL ref col_varchar_key col_varchar_key 6 test.t2.col_varchar_nokey 1 100.00 End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`col_varchar_key` AS `col_varchar_key` from `test`.`t1` semi join (`test`.`t2`) where (`test`.`t1`.`col_varchar_key` = `test`.`t2`.`col_varchar_nokey`) order by `test`.`t1`.`col_datetime_key` limit 4
|
|
SELECT col_varchar_key
|
|
FROM t1
|
|
WHERE col_varchar_key IN (SELECT col_varchar_nokey
|
|
FROM t2)
|
|
ORDER BY col_datetime_key LIMIT 4;
|
|
col_varchar_key
|
|
v
|
|
y
|
|
v
|
|
y
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#12818569.
|
|
#
|
|
# Bug#12803439: Assert in replace_subcondition() on update query
|
|
#
|
|
CREATE TABLE t1(a INTEGER);
|
|
INSERT INTO t1 values(1), (2);
|
|
CREATE TABLE t2(a INTEGER);
|
|
INSERT INTO t2 VALUES(1), (3);
|
|
SELECT *
|
|
FROM t1
|
|
WHERE a IN (SELECT a
|
|
FROM t2
|
|
HAVING a IN (SELECT a
|
|
FROM t2)
|
|
)
|
|
HAVING a IN (SELECT a
|
|
FROM t2);
|
|
a
|
|
1
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#12803439.
|
|
#
|
|
# Bug#12797534: Segfault in hp_movelink still exists
|
|
#
|
|
CREATE TABLE t1 (
|
|
g1 VARCHAR(1) NOT NULL
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES ('d'), ('s');
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL,
|
|
col_int_key INT NOT NULL,
|
|
col_varchar_key VARCHAR(1) NOT NULL,
|
|
col_varchar_nokey VARCHAR(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_varchar_key(col_varchar_key, col_int_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES
|
|
(1,4,'j','j'), (2,6,'v','v'), (3,3,'c','c'), (4,5,'m','m'),
|
|
(5,3,'d','d'), (6,246,'d','d'), (7,2,'y','y'), (8,9,'t','t'),
|
|
(9,3,'d','d'), (10,8,'s','s'), (11,1,'r','r'), (12,8,'m','m'),
|
|
(13,8,'b','b'), (14,5,'x','x'), (15,7,'g','g'), (16,5,'p','p'),
|
|
(17,1,'q','q'), (18,6,'w','w'), (19,2,'d','d'), (20,9,'e','e');
|
|
CREATE TABLE t3 (
|
|
pk INTEGER NOT NULL,
|
|
PRIMARY KEY (pk)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t3 VALUES (10);
|
|
EXPLAIN SELECT *
|
|
FROM t1
|
|
WHERE g1 NOT IN
|
|
(SELECT grandparent1.col_varchar_nokey AS g1
|
|
FROM t2 AS grandparent1
|
|
WHERE grandparent1.col_varchar_key IN
|
|
(SELECT parent1.col_varchar_nokey AS p1
|
|
FROM t2 AS parent1 LEFT JOIN t3 AS parent2 USING (pk)
|
|
)
|
|
AND grandparent1.col_varchar_key IS NOT NULL
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 NULL
|
|
1 SIMPLE parent1 NULL ALL NULL NULL NULL NULL 20 100.00 Using where; Not exists; Start temporary
|
|
1 SIMPLE parent2 NULL eq_ref PRIMARY PRIMARY 4 test.parent1.pk 1 100.00 Using index
|
|
1 SIMPLE grandparent1 NULL ref col_varchar_key col_varchar_key 6 test.parent1.col_varchar_nokey 1 100.00 Using where; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`g1` AS `g1` from `test`.`t1` anti join (`test`.`t2` `grandparent1` join `test`.`t2` `parent1` left join `test`.`t3` `parent2` on((`test`.`parent2`.`pk` = `test`.`parent1`.`pk`))) on(((`test`.`grandparent1`.`col_varchar_nokey` = `test`.`t1`.`g1`) and (`test`.`grandparent1`.`col_varchar_key` = `test`.`parent1`.`col_varchar_nokey`) and (`test`.`grandparent1`.`col_varchar_key` is not null))) where true
|
|
SELECT *
|
|
FROM t1
|
|
WHERE g1 NOT IN
|
|
(SELECT grandparent1.col_varchar_nokey AS g1
|
|
FROM t2 AS grandparent1
|
|
WHERE grandparent1.col_varchar_key IN
|
|
(SELECT parent1.col_varchar_nokey AS p1
|
|
FROM t2 AS parent1 LEFT JOIN t3 AS parent2 USING (pk)
|
|
)
|
|
AND grandparent1.col_varchar_key IS NOT NULL
|
|
);
|
|
g1
|
|
DROP TABLE t1, t2, t3;
|
|
CREATE TABLE t1 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_int_key INTEGER ,
|
|
col_varchar_key VARCHAR(1) ,
|
|
col_varchar_nokey VARCHAR(1) ,
|
|
PRIMARY KEY (pk),
|
|
KEY (col_varchar_key,col_int_key)
|
|
) ENGINE=INNODB;
|
|
INSERT INTO t1 (col_int_key,col_varchar_key,col_varchar_nokey) VALUES
|
|
(0,'x','x'), (1,'j','j'), (1,'r','r'), (9,'v','v'), (5,'r','r');
|
|
CREATE TABLE t2 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_int_key INTEGER ,
|
|
col_varchar_key VARCHAR(1) ,
|
|
col_varchar_nokey VARCHAR(1) ,
|
|
PRIMARY KEY (pk),
|
|
KEY (col_int_key),
|
|
KEY (col_varchar_key,col_int_key)
|
|
) AUTO_INCREMENT=10 ENGINE=INNODB;
|
|
INSERT INTO t2 (col_int_key, col_varchar_key, col_varchar_nokey) VALUES
|
|
(NULL,'x','x'), (NULL,'j','j'), (8,'c','c');
|
|
CREATE TABLE t3
|
|
SELECT outr.col_varchar_nokey AS x
|
|
FROM t1 AS outr
|
|
WHERE outr.col_varchar_nokey IN
|
|
(SELECT innr.col_varchar_nokey AS y
|
|
FROM t2 AS innr
|
|
WHERE innr.col_int_key IS NULL)
|
|
AND outr.col_varchar_nokey IS NOT NULL
|
|
AND NOT col_varchar_key IS NULL;
|
|
SELECT *
|
|
FROM t3
|
|
WHERE x NOT IN
|
|
(SELECT outr.col_varchar_nokey AS x
|
|
FROM t1 AS outr
|
|
WHERE outr.col_varchar_nokey IN
|
|
(SELECT innr.col_varchar_nokey AS y
|
|
FROM t2 AS innr
|
|
WHERE innr.col_int_key IS NULL)
|
|
AND outr.col_varchar_nokey IS NOT NULL
|
|
AND NOT col_varchar_key IS NULL);
|
|
x
|
|
DROP TABLE t1, t2, t3;
|
|
# End of test for bug#12797534.
|
|
#
|
|
# Bug#12714094: Assert in optimize_semijoin_nests()
|
|
#
|
|
CREATE TABLE it (
|
|
pk int NOT NULL,
|
|
col_varchar VARCHAR(10) DEFAULT NULL,
|
|
PRIMARY KEY (pk)
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO it VALUES (1, 'g');
|
|
CREATE TABLE ot
|
|
SELECT alias1.pk AS field1
|
|
FROM it AS alias1
|
|
LEFT JOIN it AS alias2
|
|
ON alias1.col_varchar = alias2.col_varchar
|
|
;
|
|
SELECT *
|
|
FROM ot
|
|
WHERE field1 IN (
|
|
SELECT alias1.pk
|
|
FROM it AS alias1
|
|
LEFT JOIN it AS alias2
|
|
ON alias1.col_varchar = alias2.col_varchar
|
|
);
|
|
field1
|
|
1
|
|
DROP TABLE it, ot;
|
|
# End of test for bug#12714094
|
|
#
|
|
# Bug#12867557: Valgrind: conditional jump/move at key_cmp
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_int_key INTEGER,
|
|
PRIMARY KEY (pk),
|
|
KEY (col_int_key)
|
|
) AUTO_INCREMENT=10;
|
|
INSERT INTO t1 (col_int_key) VALUES (8);
|
|
CREATE TABLE t2 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_int_key INTEGER,
|
|
col_time_key TIME,
|
|
PRIMARY KEY (pk),
|
|
KEY (col_int_key),
|
|
KEY (col_time_key)
|
|
) AUTO_INCREMENT=10;
|
|
INSERT INTO t2 (col_int_key, col_time_key)
|
|
VALUES
|
|
(8, '22:55:23.019225'), (7, '10:19:31.050677'), (1, '14:40:36.038608'),
|
|
(7, '04:37:47.062416'), (9, '19:34:06.054514'), (NULL,'20:35:33.022996'),
|
|
(1, NULL), (9, '14:43:37.057393'), (2, '02:23:09.043438'),
|
|
(9, '01:22:45.041064'), (2, '00:00:00'), (4, '00:13:25.038482'),
|
|
(0, '03:47:16.042671'), (4, '01:41:48.007423'), (8, '00:00:00'),
|
|
(NULL, '22:32:04.047407'), (NULL, '16:44:14.028443'), (0, '17:38:37.059754'),
|
|
(NULL, '08:46:48.042388'), (8, '14:11:27.044095');
|
|
CREATE TABLE t0
|
|
SELECT DISTINCT grandparent1.col_time_key AS g1
|
|
FROM t2 AS grandparent1
|
|
WHERE grandparent1.col_int_key IN
|
|
(SELECT parent1.col_int_key AS p1
|
|
FROM t1 AS parent1)
|
|
AND grandparent1.pk > 9;
|
|
UPDATE t0
|
|
SET g1 = g1
|
|
WHERE g1 IN
|
|
(SELECT grandparent1.col_time_key AS g1
|
|
FROM t2 AS grandparent1
|
|
WHERE grandparent1.col_int_key IN
|
|
(SELECT parent1.col_int_key AS p1
|
|
FROM t1 AS parent1)
|
|
AND grandparent1.pk > 9);
|
|
DROP TABLE t0, t1, t2;
|
|
# End of test for bug#12867557
|
|
#
|
|
# Bug#12711441: crash in fix_after_pullout
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_int_nokey int DEFAULT NULL,
|
|
col_int_key int DEFAULT NULL,
|
|
col_time_key time DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
CREATE TABLE t2 (
|
|
col_int_key int DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY col_varchar_key(col_varchar_key, col_int_key)
|
|
);
|
|
CREATE TABLE t3 (
|
|
pk int NOT NULL,
|
|
col_int_key INT DEFAULT NULL,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
CREATE TABLE t4 (
|
|
col_int_nokey INT DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY col_varchar_key(col_varchar_key)
|
|
);
|
|
CREATE TABLE ts
|
|
SELECT alias1.col_time_key AS field1
|
|
FROM v1 AS alias1
|
|
RIGHT JOIN t3 AS alias2
|
|
ON alias2.col_int_key = alias1.col_int_nokey
|
|
WHERE alias1.pk >= SOME(
|
|
SELECT SQ1_alias1.pk AS SQ1_field1
|
|
FROM t3 AS SQ1_alias1
|
|
INNER JOIN (t2 AS SQ1_alias2
|
|
INNER JOIN t4 AS SQ1_alias3
|
|
ON SQ1_alias3.col_varchar_key = SQ1_alias2.col_varchar_nokey)
|
|
ON SQ1_alias3.col_int_nokey = SQ1_alias2.col_int_key
|
|
WHERE SQ1_alias2.col_varchar_key <= alias1.col_varchar_key
|
|
AND SQ1_alias3.col_varchar_nokey <> alias1.col_varchar_key)
|
|
;
|
|
SELECT * FROM ts WHERE field1 IN (
|
|
SELECT alias1.col_time_key AS field1
|
|
FROM v1 AS alias1
|
|
RIGHT JOIN t3 AS alias2
|
|
ON alias2.col_int_key = alias1.col_int_nokey
|
|
WHERE alias1.pk >= SOME(
|
|
SELECT SQ1_alias1.pk AS SQ1_field1
|
|
FROM t3 AS SQ1_alias1
|
|
INNER JOIN (t2 AS SQ1_alias2
|
|
INNER JOIN t4 AS SQ1_alias3
|
|
ON SQ1_alias3.col_varchar_key = SQ1_alias2.col_varchar_nokey)
|
|
ON SQ1_alias3.col_int_nokey = SQ1_alias2.col_int_key
|
|
WHERE SQ1_alias2.col_varchar_key <= alias1.col_varchar_key
|
|
AND SQ1_alias3.col_varchar_nokey <> alias1.col_varchar_key)
|
|
);
|
|
field1
|
|
DROP TABLE t1, t2, t3, t4, ts;
|
|
DROP VIEW v1;
|
|
# End of test for bug#12711441.
|
|
#
|
|
# Bug#12664936: Same query executed as where subquery ...
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_varchar_key VARCHAR(1),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES
|
|
('o'), ('w'), ('m'), ('q'),
|
|
('f'), ('p'), ('j'), ('c');
|
|
CREATE TABLE t2 (
|
|
col_int_nokey INTEGER,
|
|
col_int_key INTEGER,
|
|
col_varchar_key varchar(1),
|
|
KEY col_int_key (col_int_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES
|
|
(8,5,'u'),(4,5,'p'),(8,1,'o'),(NULL,7,'v'),
|
|
(1,2,'g'),(2,1,'q'),(NULL,7,'l'),(3,1,'n');
|
|
CREATE TABLE t4
|
|
SELECT t2.col_int_nokey, t2.col_varchar_key
|
|
FROM t1 JOIN t2 ON t2.col_varchar_key = t1.col_varchar_key
|
|
WHERE t2.col_int_key = 1;
|
|
EXPLAIN SELECT *
|
|
FROM t4
|
|
WHERE (col_int_nokey, col_varchar_key) IN
|
|
(SELECT t2.col_int_nokey, t2.col_varchar_key
|
|
FROM t1 JOIN t2 ON t2.col_varchar_key = t1.col_varchar_key
|
|
WHERE t2.col_int_key = 1
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 2 100.00 Using where
|
|
1 SIMPLE t2 NULL ref col_int_key col_int_key 5 const 3 12.50 Using where; Start temporary
|
|
1 SIMPLE t1 NULL ref col_varchar_key col_varchar_key 7 test.t4.col_varchar_key 2 100.00 Using index; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t4`.`col_int_nokey` AS `col_int_nokey`,`test`.`t4`.`col_varchar_key` AS `col_varchar_key` from `test`.`t4` semi join (`test`.`t1` join `test`.`t2`) where ((`test`.`t2`.`col_varchar_key` = `test`.`t4`.`col_varchar_key`) and (`test`.`t1`.`col_varchar_key` = `test`.`t4`.`col_varchar_key`) and (`test`.`t2`.`col_int_nokey` = `test`.`t4`.`col_int_nokey`) and (`test`.`t2`.`col_int_key` = 1))
|
|
SELECT *
|
|
FROM t4
|
|
WHERE (col_int_nokey, col_varchar_key) IN
|
|
(SELECT t2.col_int_nokey, t2.col_varchar_key
|
|
FROM t1 JOIN t2 ON t2.col_varchar_key = t1.col_varchar_key
|
|
WHERE t2.col_int_key = 1
|
|
);
|
|
col_int_nokey col_varchar_key
|
|
8 o
|
|
2 q
|
|
DROP TABLE t1, t2, t4;
|
|
# End of test for bug#12664936.
|
|
#
|
|
# Bug#13340270: assertion table->sort.record_pointers == __null
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_int_key int DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key, col_int_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES
|
|
(10,8,'x','x'),
|
|
(11,7,'d','d'),
|
|
(12,1,'r','r'),
|
|
(13,7,'f','f'),
|
|
(14,9,'y','y'),
|
|
(15,NULL,'u','u'),
|
|
(16,1,'m','m'),
|
|
(17,9,NULL,NULL),
|
|
(18,2,'o','o'),
|
|
(19,9,'w','w'),
|
|
(20,2,'m','m'),
|
|
(21,4,'q','q');
|
|
CREATE TABLE t2
|
|
SELECT alias1.col_varchar_nokey AS field1
|
|
FROM t1 AS alias1 JOIN t1 AS alias2
|
|
ON alias2.col_int_key = alias1.pk OR
|
|
alias2.col_int_key = alias1.col_int_key
|
|
WHERE alias1.pk = 58 OR alias1.col_varchar_key = 'o'
|
|
|
|
;
|
|
EXPLAIN SELECT *
|
|
FROM t2
|
|
WHERE (field1) IN (SELECT alias1.col_varchar_nokey AS field1
|
|
FROM t1 AS alias1 JOIN t1 AS alias2
|
|
ON alias2.col_int_key = alias1.pk OR
|
|
alias2.col_int_key = alias1.col_int_key
|
|
WHERE alias1.pk = 58 OR alias1.col_varchar_key = 'o'
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE alias1 NULL index_merge PRIMARY,col_int_key,col_varchar_key col_varchar_key,PRIMARY 7,4 NULL 2 10.00 Using sort_union(col_varchar_key,PRIMARY); Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE alias2 NULL ALL col_int_key NULL NULL NULL 12 19.00 Range checked for each record (index map: 0x2); End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`field1` AS `field1` from `test`.`t2` semi join (`test`.`t1` `alias1` join `test`.`t1` `alias2`) where ((`test`.`alias1`.`col_varchar_nokey` = `test`.`t2`.`field1`) and ((`test`.`alias1`.`pk` = 58) or (`test`.`alias1`.`col_varchar_key` = 'o')) and ((`test`.`alias2`.`col_int_key` = `test`.`alias1`.`pk`) or (`test`.`alias2`.`col_int_key` = `test`.`alias1`.`col_int_key`)))
|
|
SELECT *
|
|
FROM t2
|
|
WHERE (field1) IN (SELECT alias1.col_varchar_nokey AS field1
|
|
FROM t1 AS alias1 JOIN t1 AS alias2
|
|
ON alias2.col_int_key = alias1.pk OR
|
|
alias2.col_int_key = alias1.col_int_key
|
|
WHERE alias1.pk = 58 OR alias1.col_varchar_key = 'o'
|
|
);
|
|
field1
|
|
o
|
|
o
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13340270.
|
|
#
|
|
# Bug#13335319: Seg fault when analyzing FirstMatch semi-join strategy
|
|
#
|
|
CREATE TABLE ot1(a INTEGER);
|
|
INSERT INTO ot1 VALUES(1), (2), (3);
|
|
CREATE TABLE ot2(a INTEGER);
|
|
INSERT INTO ot2 VALUES(1), (2), (4), (6), (8), (10);
|
|
CREATE TABLE it1(a INTEGER);
|
|
INSERT INTO it1 VALUES(1), (3), (5), (7);
|
|
CREATE TABLE it2(a INTEGER);
|
|
INSERT INTO it2 VALUES(1), (3), (5), (7), (9);
|
|
explain SELECT ot1.a, ot2.a
|
|
FROM ot1, ot2
|
|
WHERE ot1.a IN (SELECT a FROM it1) AND
|
|
ot2.a IN (SELECT a FROM it2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 5 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 3 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`a` AS `a`,`test`.`ot2`.`a` AS `a` from `test`.`ot1` join `test`.`ot2` semi join (`test`.`it1`) semi join (`test`.`it2`) where ((`test`.`ot2`.`a` = `test`.`it2`.`a`) and (`test`.`it1`.`a` = `test`.`ot1`.`a`))
|
|
SELECT ot1.a, ot2.a
|
|
FROM ot1, ot2
|
|
WHERE ot1.a IN (SELECT a FROM it1) AND
|
|
ot2.a IN (SELECT a FROM it2);
|
|
a a
|
|
1 1
|
|
3 1
|
|
DROP TABLE ot1, ot2, it1, it2;
|
|
# End of test for bug#13335319.
|
|
#
|
|
# Bug#13334882: Assertion keypart_map failed in MyIsam function
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_int_nokey INT NOT NULL,
|
|
col_int_key INT NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO t1 VALUES
|
|
(1,4,0),
|
|
(2,6,8),
|
|
(3,3,1),
|
|
(7,2,6),
|
|
(8,9,1),
|
|
(9,3,6),
|
|
(10,8,2),
|
|
(11,1,4),
|
|
(12,8,8),
|
|
(13,8,4),
|
|
(14,5,4);
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL,
|
|
col_int_nokey int NOT NULL,
|
|
col_int_key int NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO t2 VALUES
|
|
(10,8,7);
|
|
CREATE TABLE t3
|
|
SELECT grandparent1.col_int_nokey AS g1
|
|
FROM t1 AS grandparent1
|
|
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
|
|
(SELECT parent1.col_int_key AS p1,
|
|
parent1.col_int_key AS p2
|
|
FROM t1 AS parent1
|
|
LEFT JOIN t2 AS parent2
|
|
ON parent1.col_int_nokey = parent2.col_int_key
|
|
)
|
|
AND grandparent1.col_int_key <> 3
|
|
;
|
|
explain SELECT * FROM t3
|
|
WHERE g1 NOT IN
|
|
(SELECT grandparent1.col_int_nokey AS g1
|
|
FROM t1 AS grandparent1
|
|
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
|
|
(SELECT parent1.col_int_key AS p1,
|
|
parent1.col_int_key AS p2
|
|
FROM t1 AS parent1
|
|
LEFT JOIN t2 AS parent2
|
|
ON parent1.col_int_nokey = parent2.col_int_key
|
|
)
|
|
AND grandparent1.col_int_key <> 3
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE grandparent1 NULL ref col_int_key col_int_key 4 const 1 100.00 Using where; Not exists; Start temporary
|
|
1 SIMPLE parent1 NULL ref col_int_key col_int_key 4 test.grandparent1.col_int_nokey 1 100.00 Using where
|
|
1 SIMPLE parent2 NULL ref col_int_key col_int_key 4 test.parent1.col_int_nokey 2 100.00 Using index; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '8' AS `g1` from <constant table> anti join (`test`.`t1` `grandparent1` join `test`.`t1` `parent1` left join `test`.`t2` `parent2` on((`test`.`parent2`.`col_int_key` = `test`.`parent1`.`col_int_nokey`))) on(((`test`.`grandparent1`.`col_int_nokey` = '8') and (`test`.`grandparent1`.`col_int_key` = '8') and (`test`.`parent1`.`col_int_key` = '8') and ('8' <> 3))) where true
|
|
explain format=json SELECT * FROM t3
|
|
WHERE g1 NOT IN
|
|
(SELECT grandparent1.col_int_nokey AS g1
|
|
FROM t1 AS grandparent1
|
|
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
|
|
(SELECT parent1.col_int_key AS p1,
|
|
parent1.col_int_key AS p2
|
|
FROM t1 AS parent1
|
|
LEFT JOIN t2 AS parent2
|
|
ON parent1.col_int_nokey = parent2.col_int_key
|
|
)
|
|
AND grandparent1.col_int_key <> 3
|
|
);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "2.70"
|
|
},
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "t3",
|
|
"access_type": "system",
|
|
"rows_examined_per_scan": 1,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.00",
|
|
"eval_cost": "0.10",
|
|
"prefix_cost": "0.00",
|
|
"data_read_per_join": "8"
|
|
},
|
|
"used_columns": [
|
|
"g1"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "grandparent1",
|
|
"access_type": "ref",
|
|
"possible_keys": [
|
|
"col_int_key"
|
|
],
|
|
"key": "col_int_key",
|
|
"used_key_parts": [
|
|
"col_int_key"
|
|
],
|
|
"key_length": "4",
|
|
"ref": [
|
|
"const"
|
|
],
|
|
"rows_examined_per_scan": 1,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "100.00",
|
|
"not_exists": true,
|
|
"cost_info": {
|
|
"read_cost": "0.28",
|
|
"eval_cost": "0.11",
|
|
"prefix_cost": "0.39",
|
|
"data_read_per_join": "17"
|
|
},
|
|
"used_columns": [
|
|
"col_int_nokey",
|
|
"col_int_key"
|
|
],
|
|
"attached_condition": "((<if>(is_not_null_compl(grandparent1..parent2), <if>(found_match(grandparent1..parent2), false, true), true) and <if>(is_not_null_compl(grandparent1..parent2), <cache>(('8' <> 3)), true)) and <if>(is_not_null_compl(grandparent1..parent2), (`test`.`grandparent1`.`col_int_nokey` = '8'), true))"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "parent1",
|
|
"access_type": "ref",
|
|
"possible_keys": [
|
|
"col_int_key"
|
|
],
|
|
"key": "col_int_key",
|
|
"used_key_parts": [
|
|
"col_int_key"
|
|
],
|
|
"key_length": "4",
|
|
"ref": [
|
|
"test.grandparent1.col_int_nokey"
|
|
],
|
|
"rows_examined_per_scan": 1,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.30",
|
|
"eval_cost": "0.12",
|
|
"prefix_cost": "0.81",
|
|
"data_read_per_join": "19"
|
|
},
|
|
"used_columns": [
|
|
"col_int_nokey",
|
|
"col_int_key"
|
|
],
|
|
"attached_condition": "<if>(is_not_null_compl(grandparent1..parent2), (`test`.`parent1`.`col_int_key` = '8'), true)"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "parent2",
|
|
"access_type": "ref",
|
|
"possible_keys": [
|
|
"col_int_key"
|
|
],
|
|
"key": "col_int_key",
|
|
"used_key_parts": [
|
|
"col_int_key"
|
|
],
|
|
"key_length": "4",
|
|
"ref": [
|
|
"test.parent1.col_int_nokey"
|
|
],
|
|
"rows_examined_per_scan": 2,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "100.00",
|
|
"using_index": true,
|
|
"cost_info": {
|
|
"read_cost": "0.31",
|
|
"eval_cost": "0.10",
|
|
"prefix_cost": "2.70",
|
|
"data_read_per_join": "16"
|
|
},
|
|
"used_columns": [
|
|
"col_int_key"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select '8' AS `g1` from <constant table> anti join (`test`.`t1` `grandparent1` join `test`.`t1` `parent1` left join `test`.`t2` `parent2` on((`test`.`parent2`.`col_int_key` = `test`.`parent1`.`col_int_nokey`))) on(((`test`.`grandparent1`.`col_int_nokey` = '8') and (`test`.`grandparent1`.`col_int_key` = '8') and (`test`.`parent1`.`col_int_key` = '8') and ('8' <> 3))) where true
|
|
SELECT * FROM t3
|
|
WHERE g1 NOT IN
|
|
(SELECT grandparent1.col_int_nokey AS g1
|
|
FROM t1 AS grandparent1
|
|
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
|
|
(SELECT parent1.col_int_key AS p1,
|
|
parent1.col_int_key AS p2
|
|
FROM t1 AS parent1
|
|
LEFT JOIN t2 AS parent2
|
|
ON parent1.col_int_nokey = parent2.col_int_key
|
|
)
|
|
AND grandparent1.col_int_key <> 3
|
|
);
|
|
g1
|
|
DROP TABLE t1, t2, t3;
|
|
# End of test for bug#13334882.
|
|
#
|
|
# Bug#13339643: Assertion on JOIN::flatten_subqueries on second execution
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_nokey INT,
|
|
col_varchar_nokey VARCHAR(1)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES
|
|
(1,'o'),
|
|
(2,'t');
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUES
|
|
(1,'o'),
|
|
(4,'f');
|
|
CREATE VIEW v_t2 AS SELECT * FROM t2;
|
|
CREATE TABLE t3 LIKE t1;
|
|
INSERT INTO t3 VALUES
|
|
(1,'o'),
|
|
(4,'f');
|
|
explain SELECT alias1.col_varchar_nokey
|
|
FROM t1 AS alias1
|
|
INNER JOIN v_t2 AS alias2
|
|
ON alias2.col_int_nokey = alias1.col_int_nokey AND
|
|
'o' IN (SELECT col_varchar_nokey
|
|
FROM t3);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Start temporary; End temporary
|
|
1 SIMPLE alias1 NULL ALL NULL NULL NULL NULL 2 100.00 Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`alias1`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t1` `alias1` join `test`.`t2` semi join (`test`.`t3`) where ((`test`.`t3`.`col_varchar_nokey` = 'o') and (`test`.`t2`.`col_int_nokey` = `test`.`alias1`.`col_int_nokey`))
|
|
SELECT alias1.col_varchar_nokey
|
|
FROM t1 AS alias1
|
|
INNER JOIN v_t2 AS alias2
|
|
ON alias2.col_int_nokey = alias1.col_int_nokey AND
|
|
'o' IN (SELECT col_varchar_nokey
|
|
FROM t3);
|
|
col_varchar_nokey
|
|
o
|
|
PREPARE stmt FROM "SELECT alias1.col_varchar_nokey
|
|
FROM t1 AS alias1
|
|
INNER JOIN v_t2 AS alias2
|
|
ON alias2.col_int_nokey = alias1.col_int_nokey AND
|
|
'o' IN (SELECT col_varchar_nokey
|
|
FROM t3)";
|
|
EXECUTE stmt;
|
|
col_varchar_nokey
|
|
o
|
|
DROP VIEW v_t2;
|
|
DROP TABLE t1, t2, t3;
|
|
# End of test for bug#13339643.
|
|
#
|
|
# Bug#13424134: Wrong result on JOIN + nested WHERE ... IN clauses
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_int_nokey int NOT NULL,
|
|
col_int_key int NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
) ENGINE=MyIsam;
|
|
INSERT INTO t1 VALUES
|
|
(10,1,7), (13,7,3), (18,0,1), (23,8,1);
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL,
|
|
col_int_key int NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
) ENGINE=MyIsam;
|
|
INSERT INTO t2 VALUES (1,7);
|
|
EXPLAIN SELECT t1a.*
|
|
FROM t1 AS t1a
|
|
JOIN t1 AS t1b USING ( col_int_nokey )
|
|
WHERE t1a.col_int_key IN (
|
|
SELECT pk
|
|
FROM t2
|
|
WHERE col_int_key IN (
|
|
SELECT col_int_nokey
|
|
FROM t1
|
|
)
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 NULL system PRIMARY,col_int_key NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t1a NULL ref col_int_key col_int_key 4 const 1 100.00 Start temporary
|
|
1 SIMPLE t1b NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1a`.`pk` AS `pk`,`test`.`t1a`.`col_int_nokey` AS `col_int_nokey`,`test`.`t1a`.`col_int_key` AS `col_int_key` from `test`.`t1` `t1a` join `test`.`t1` `t1b` semi join (`test`.`t1`) where ((`test`.`t1b`.`col_int_nokey` = `test`.`t1a`.`col_int_nokey`) and (`test`.`t1a`.`col_int_key` = '1') and (`test`.`t1`.`col_int_nokey` = '7'))
|
|
SELECT t1a.*
|
|
FROM t1 AS t1a
|
|
JOIN t1 AS t1b USING ( col_int_nokey )
|
|
WHERE t1a.col_int_key IN (
|
|
SELECT pk
|
|
FROM t2
|
|
WHERE col_int_key IN (
|
|
SELECT col_int_nokey
|
|
FROM t1
|
|
)
|
|
);
|
|
pk col_int_nokey col_int_key
|
|
18 0 1
|
|
23 8 1
|
|
ALTER TABLE t1 ENGINE=Innodb;
|
|
ALTER TABLE t2 ENGINE=Innodb;
|
|
SELECT t1a.*
|
|
FROM t1 AS t1a
|
|
JOIN t1 AS t1b USING ( col_int_nokey )
|
|
WHERE t1a.col_int_key IN (
|
|
SELECT pk
|
|
FROM t2
|
|
WHERE col_int_key IN (
|
|
SELECT col_int_nokey
|
|
FROM t1
|
|
)
|
|
);
|
|
pk col_int_nokey col_int_key
|
|
18 0 1
|
|
23 8 1
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13424134.
|
|
#
|
|
# Bug#13414014: Extra rows in result on semijoin query with where ...
|
|
#
|
|
CREATE TABLE t1 (
|
|
c INT,
|
|
d INT,
|
|
a VARCHAR(1),
|
|
b VARCHAR(1),
|
|
KEY a (a)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES
|
|
(NULL,8,'x','x'), (7,4,'q','q'), (6,8,'c','c');
|
|
CREATE TABLE t2 (
|
|
a VARCHAR(1),
|
|
KEY a (a)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES
|
|
('c'), (NULL), ('x'), ('q');
|
|
explain SELECT *
|
|
FROM t2 AS ot
|
|
WHERE (a, a) IN
|
|
(SELECT a, b
|
|
FROM t1 AS it
|
|
WHERE it.a = 'x' OR it.c > it.d
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE it NULL ALL a NULL NULL NULL 3 40.74 Using where; Start temporary
|
|
1 SIMPLE ot NULL ref a a 7 test.it.a 2 100.00 Using index; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`a` AS `a` from `test`.`t2` `ot` semi join (`test`.`t1` `it`) where ((`test`.`it`.`b` = `test`.`it`.`a`) and (`test`.`ot`.`a` = `test`.`it`.`a`) and ((`test`.`it`.`a` = 'x') or (`test`.`it`.`c` > `test`.`it`.`d`)))
|
|
SELECT *
|
|
FROM t2 AS ot
|
|
WHERE (a, a) IN
|
|
(SELECT a, b
|
|
FROM t1 AS it
|
|
WHERE it.a = 'x' OR it.c > it.d
|
|
)
|
|
;
|
|
a
|
|
x
|
|
q
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13414014.
|
|
#
|
|
# Bug#13545215: Missing rows on nested in-subquery with materialization
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_key int,
|
|
col_varchar_key varchar(1),
|
|
col_varchar_nokey varchar(1),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES
|
|
(8,'x','x'), (0,'p','p'), (8,'c','c');
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL,
|
|
col_varchar_key varchar(1),
|
|
col_varchar_nokey varchar(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES
|
|
(1,'v','v'), (2,'v','v'), (3,'c','c'), (4,NULL,NULL),
|
|
(5,'x','x'), (6,'i','i'), (7,'e','e'), (8,'p','p');
|
|
CREATE TABLE t3 (
|
|
col_int_nokey int
|
|
);
|
|
INSERT INTO t3 VALUES (7);
|
|
explain SELECT grandparent1.col_varchar_nokey
|
|
FROM t1 AS grandparent1 JOIN t1 AS grandparent2 USING (col_int_key)
|
|
WHERE grandparent1.col_varchar_key IN (
|
|
SELECT col_varchar_nokey
|
|
FROM t2 AS parent1
|
|
WHERE col_varchar_key IN (
|
|
SELECT child1.col_varchar_nokey
|
|
FROM t2 AS child1 LEFT JOIN t3 AS child2
|
|
ON child1.pk < child2.col_int_nokey
|
|
)
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE grandparent1 NULL ALL col_int_key,col_varchar_key NULL NULL NULL 3 100.00 Using where; Start temporary
|
|
1 SIMPLE parent1 NULL ALL col_varchar_key NULL NULL NULL 8 12.50 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE child1 NULL ALL NULL NULL NULL NULL 8 12.50 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE child2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE grandparent2 NULL ref col_int_key col_int_key 5 test.grandparent1.col_int_key 2 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`grandparent1`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t1` `grandparent1` join `test`.`t1` `grandparent2` semi join (`test`.`t2` `parent1` join `test`.`t2` `child1` left join `test`.`t3` `child2` on((`test`.`child1`.`pk` < `test`.`child2`.`col_int_nokey`))) where ((`test`.`grandparent2`.`col_int_key` = `test`.`grandparent1`.`col_int_key`) and (`test`.`parent1`.`col_varchar_nokey` = `test`.`grandparent1`.`col_varchar_key`) and (`test`.`child1`.`col_varchar_nokey` = `test`.`parent1`.`col_varchar_key`))
|
|
SELECT grandparent1.col_varchar_nokey
|
|
FROM t1 AS grandparent1 JOIN t1 AS grandparent2 USING (col_int_key)
|
|
WHERE grandparent1.col_varchar_key IN (
|
|
SELECT col_varchar_nokey
|
|
FROM t2 AS parent1
|
|
WHERE col_varchar_key IN (
|
|
SELECT child1.col_varchar_nokey
|
|
FROM t2 AS child1 LEFT JOIN t3 AS child2
|
|
ON child1.pk < child2.col_int_nokey
|
|
)
|
|
);
|
|
col_varchar_nokey
|
|
c
|
|
c
|
|
p
|
|
x
|
|
x
|
|
DROP TABLE t1, t2, t3;
|
|
# End of test for bug#13545215.
|
|
#
|
|
# BUG#13553211 - MISSING ROWS ON SELECT WITH IN-SUBQUERY AND
|
|
# MATERIALIZATION + SEMIJOIN ON
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_key int(11) DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES (4,'v','v');
|
|
INSERT INTO t1 VALUES (62,'v','v');
|
|
INSERT INTO t1 VALUES (7,'c','c');
|
|
INSERT INTO t1 VALUES (1,NULL,NULL);
|
|
EXPLAIN SELECT
|
|
alias1.col_varchar_nokey AS a1_nokey,
|
|
alias1.col_varchar_key AS a1_key,
|
|
alias2.col_varchar_nokey AS a2_nokey
|
|
FROM
|
|
t1 AS alias1, t1 AS alias2
|
|
WHERE
|
|
(alias1.col_varchar_nokey,alias2.col_varchar_nokey)
|
|
IN
|
|
(
|
|
SELECT
|
|
sq2_alias2.col_varchar_nokey, sq2_alias1.col_varchar_key
|
|
FROM
|
|
t1 AS sq2_alias1, t1 AS sq2_alias2
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE alias1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL
|
|
1 SIMPLE sq2_alias1 NULL index col_varchar_key col_varchar_key 12 NULL 4 100.00 Using index; LooseScan
|
|
1 SIMPLE sq2_alias2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; FirstMatch(sq2_alias1)
|
|
1 SIMPLE alias2 NULL ALL NULL NULL NULL NULL 4 25.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`alias1`.`col_varchar_nokey` AS `a1_nokey`,`test`.`alias1`.`col_varchar_key` AS `a1_key`,`test`.`alias2`.`col_varchar_nokey` AS `a2_nokey` from `test`.`t1` `alias1` join `test`.`t1` `alias2` semi join (`test`.`t1` `sq2_alias1` join `test`.`t1` `sq2_alias2`) where ((`test`.`alias2`.`col_varchar_nokey` = `test`.`sq2_alias1`.`col_varchar_key`) and (`test`.`sq2_alias2`.`col_varchar_nokey` = `test`.`alias1`.`col_varchar_nokey`))
|
|
SELECT
|
|
alias1.col_varchar_nokey AS a1_nokey,
|
|
alias1.col_varchar_key AS a1_key,
|
|
alias2.col_varchar_nokey AS a2_nokey
|
|
FROM
|
|
t1 AS alias1, t1 AS alias2
|
|
WHERE
|
|
(alias1.col_varchar_nokey,alias2.col_varchar_nokey)
|
|
IN
|
|
(
|
|
SELECT
|
|
sq2_alias2.col_varchar_nokey, sq2_alias1.col_varchar_key
|
|
FROM
|
|
t1 AS sq2_alias1, t1 AS sq2_alias2
|
|
)
|
|
;
|
|
a1_nokey a1_key a2_nokey
|
|
c c c
|
|
c c v
|
|
c c v
|
|
v v c
|
|
v v c
|
|
v v v
|
|
v v v
|
|
v v v
|
|
v v v
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#13541406: Wrong result with loosescan on select .. where .. in
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_key INT NOT NULL,
|
|
col_varchar_nokey VARCHAR(1) NOT NULL,
|
|
KEY col_int_key (col_int_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES
|
|
(7,'v'), (0,'s'), (9,'l'), (3,'y'), (4,'c'), (2,'i'), (5,'h'), (3,'q'),
|
|
(1,'a'), (3,'v'), (6,'u'), (7,'s'), (5,'y'), (1,'z'), (204,'h'), (224,'p'),
|
|
(9,'e'), (5,'i'), (0,'y'), (3,'w');
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL,
|
|
col_int_key INT NOT NULL,
|
|
col_varchar_key VARCHAR(1) NOT NULL,
|
|
col_varchar_nokey VARCHAR(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES
|
|
(1,0,'j','j'), (2,8,'v','v'), (3,1,'c','c'), (4,8,'m','m'),
|
|
(5,9,'d','d'), (6,24,'d','d'), (7,6,'y','y'), (8,1,'t','t'),
|
|
(9,6,'d','d'), (10,2,'s','s'), (11,4,'r','r'), (12,8,'m','m'),
|
|
(13,4,'b','b'), (14,4,'x','x'), (15,7,'g','g'), (16,4,'p','p'),
|
|
(17,1,'q','q'), (18,9,'w','w'), (19,4,'d','d'), (20,8,'e','e');
|
|
# This query should never use a LooseScan strategy
|
|
explain SELECT ot1.col_int_key AS field1
|
|
FROM t2 AS ot1, t2 AS ot2
|
|
WHERE (ot1.col_varchar_key, ot2.col_varchar_nokey) IN (
|
|
SELECT it2.col_varchar_nokey, it1.col_varchar_key
|
|
FROM t2 AS it1 JOIN t1 AS it2 ON it2.col_int_key = it1.pk);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL index col_varchar_key col_varchar_key 10 NULL 20 100.00 Using index
|
|
1 SIMPLE it1 NULL index PRIMARY,col_varchar_key col_varchar_key 10 NULL 20 80.00 Using index; LooseScan
|
|
1 SIMPLE it2 NULL ref col_int_key col_int_key 4 test.it1.pk 1 10.00 Using where; FirstMatch(it1)
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 20 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`col_int_key` AS `field1` from `test`.`t2` `ot1` join `test`.`t2` `ot2` semi join (`test`.`t2` `it1` join `test`.`t1` `it2`) where ((`test`.`it2`.`col_int_key` = `test`.`it1`.`pk`) and (`test`.`ot2`.`col_varchar_nokey` = `test`.`it1`.`col_varchar_key`) and (`test`.`it2`.`col_varchar_nokey` = `test`.`ot1`.`col_varchar_key`))
|
|
SELECT ot1.col_int_key AS field1
|
|
FROM t2 AS ot1, t2 AS ot2
|
|
WHERE (ot1.col_varchar_key, ot2.col_varchar_nokey) IN (
|
|
SELECT it2.col_varchar_nokey, it1.col_varchar_key
|
|
FROM t2 AS it1 JOIN t1 AS it2 ON it2.col_int_key = it1.pk);
|
|
field1
|
|
1
|
|
1
|
|
1
|
|
2
|
|
6
|
|
6
|
|
6
|
|
6
|
|
6
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
9
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13541406.
|
|
#
|
|
# Bug#13576391: Missing rows on select with in-subquery and
|
|
# batched-key-access=on and semijoin
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_nokey int NOT NULL,
|
|
col_varchar_key varchar(1) NOT NULL,
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) charset utf8mb4 engine=InnoDB;
|
|
INSERT INTO t1 VALUES
|
|
(1,'v'), (7,'s'), (4,'l'), (7,'y'), (0,'c'), (2,'i'), (9,'h'), (4,'q'),
|
|
(0,'a'), (9,'v'), (1,'u'), (3,'s'), (8,'y'), (8,'z'), (18,'h'), (84,'p'),
|
|
(6,'e'), (3,'i'), (6,'y'), (6,'w');
|
|
CREATE TABLE t2 (
|
|
col_int_nokey int NOT NULL,
|
|
col_varchar_nokey varchar(1) NOT NULL
|
|
) charset utf8mb4 engine=InnoDB;
|
|
INSERT INTO t2 VALUES
|
|
(4,'j'), (6,'v'), (3,'c'), (5,'m'), (3,'d'), (246,'d'), (2,'y'), (9,'t'),
|
|
(3,'d'), (8,'s'), (1,'r'), (8,'m'), (8,'b'), (5,'x'), (7,'g'), (5,'p'),
|
|
(1,'q'), (6,'w'), (2,'d'), (9,'e');
|
|
explain SELECT col_varchar_nokey
|
|
FROM t2 AS ot
|
|
WHERE col_varchar_nokey IN (
|
|
SELECT col_varchar_key
|
|
FROM t1 AS it
|
|
WHERE it.col_int_nokey <= it.col_int_nokey
|
|
AND NOT ot.col_int_nokey < 2
|
|
)
|
|
ORDER BY col_varchar_nokey;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 20 33.33 Using where; Using filesort
|
|
1 SIMPLE it NULL ref col_varchar_key col_varchar_key 6 test.ot.col_varchar_nokey 1 100.00 Start temporary; End temporary
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.ot.col_int_nokey' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t2` `ot` semi join (`test`.`t1` `it`) where ((`test`.`it`.`col_varchar_key` = `test`.`ot`.`col_varchar_nokey`) and (`test`.`ot`.`col_int_nokey` >= 2)) order by `test`.`ot`.`col_varchar_nokey`
|
|
SELECT col_varchar_nokey
|
|
FROM t2 AS ot
|
|
WHERE col_varchar_nokey IN (
|
|
SELECT col_varchar_key
|
|
FROM t1 AS it
|
|
WHERE it.col_int_nokey <= it.col_int_nokey
|
|
AND NOT ot.col_int_nokey < 2
|
|
)
|
|
ORDER BY col_varchar_nokey;
|
|
col_varchar_nokey
|
|
c
|
|
e
|
|
p
|
|
s
|
|
v
|
|
w
|
|
y
|
|
ALTER TABLE t1 ENGINE=MyISAM;
|
|
ALTER TABLE t2 ENGINE=MyISAM;
|
|
explain SELECT col_varchar_nokey
|
|
FROM t2 AS ot
|
|
WHERE col_varchar_nokey IN (
|
|
SELECT col_varchar_key
|
|
FROM t1 AS it
|
|
WHERE it.col_int_nokey <= it.col_int_nokey
|
|
AND NOT ot.col_int_nokey < 2
|
|
)
|
|
ORDER BY col_varchar_nokey;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 20 33.33 Using where; Using filesort
|
|
1 SIMPLE it NULL ref col_varchar_key col_varchar_key 6 test.ot.col_varchar_nokey 2 100.00 Start temporary; End temporary
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.ot.col_int_nokey' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t2` `ot` semi join (`test`.`t1` `it`) where ((`test`.`it`.`col_varchar_key` = `test`.`ot`.`col_varchar_nokey`) and (`test`.`ot`.`col_int_nokey` >= 2)) order by `test`.`ot`.`col_varchar_nokey`
|
|
SELECT col_varchar_nokey
|
|
FROM t2 AS ot
|
|
WHERE col_varchar_nokey IN (
|
|
SELECT col_varchar_key
|
|
FROM t1 AS it
|
|
WHERE it.col_int_nokey <= it.col_int_nokey
|
|
AND NOT ot.col_int_nokey < 2
|
|
)
|
|
ORDER BY col_varchar_nokey;
|
|
col_varchar_nokey
|
|
c
|
|
e
|
|
p
|
|
s
|
|
v
|
|
w
|
|
y
|
|
ALTER TABLE t1 ENGINE=Memory;
|
|
ALTER TABLE t2 ENGINE=Memory;
|
|
explain SELECT col_varchar_nokey
|
|
FROM t2 AS ot
|
|
WHERE col_varchar_nokey IN (
|
|
SELECT col_varchar_key
|
|
FROM t1 AS it
|
|
WHERE it.col_int_nokey <= it.col_int_nokey
|
|
AND NOT ot.col_int_nokey < 2
|
|
)
|
|
ORDER BY col_varchar_nokey;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot NULL ALL NULL NULL NULL NULL 20 33.33 Using where; Using filesort
|
|
1 SIMPLE it NULL ref col_varchar_key col_varchar_key 6 test.ot.col_varchar_nokey 2 100.00 Start temporary; End temporary
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.ot.col_int_nokey' of SELECT #2 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select `test`.`ot`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t2` `ot` semi join (`test`.`t1` `it`) where ((`test`.`it`.`col_varchar_key` = `test`.`ot`.`col_varchar_nokey`) and (`test`.`ot`.`col_int_nokey` >= 2)) order by `test`.`ot`.`col_varchar_nokey`
|
|
SELECT col_varchar_nokey
|
|
FROM t2 AS ot
|
|
WHERE col_varchar_nokey IN (
|
|
SELECT col_varchar_key
|
|
FROM t1 AS it
|
|
WHERE it.col_int_nokey <= it.col_int_nokey
|
|
AND NOT ot.col_int_nokey < 2
|
|
)
|
|
ORDER BY col_varchar_nokey;
|
|
col_varchar_nokey
|
|
c
|
|
e
|
|
p
|
|
s
|
|
v
|
|
w
|
|
y
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13576391.
|
|
#
|
|
# Bug #13589848 "MISSING ROW ON SELECT WITH NESTED IN CLAUSES WHEN LOOSESCAN=ON"
|
|
#
|
|
CREATE TABLE t1 (
|
|
id INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
KEY (col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES (100,'m','m'),
|
|
(200,'b','b'), (300,'x','x');
|
|
CREATE TABLE t2 (
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
KEY (col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES ('b','b');
|
|
CREATE TABLE t3 (
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
KEY (col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t3 VALUES ('k','k');
|
|
EXPLAIN SELECT gp1.id
|
|
FROM t1 AS gp1 JOIN t3 AS gp2
|
|
ON gp2.col_varchar_key <> gp1.col_varchar_nokey
|
|
WHERE (gp1.col_varchar_nokey, gp1.col_varchar_nokey)
|
|
IN (
|
|
SELECT col_varchar_nokey, col_varchar_nokey
|
|
FROM t1
|
|
WHERE col_varchar_nokey
|
|
IN ( SELECT col_varchar_key
|
|
FROM t2 LEFT JOIN t3 USING (col_varchar_key) )
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE gp2 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t2 NULL index col_varchar_key col_varchar_key 7 NULL 1 100.00 Using where; Using index; Start temporary
|
|
1 SIMPLE gp1 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t3 NULL ref col_varchar_key col_varchar_key 7 test.t2.col_varchar_key 2 100.00 Using index; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`gp1`.`id` AS `id` from `test`.`t1` `gp1` semi join (`test`.`t1` join `test`.`t2` left join `test`.`t3` on((`test`.`t2`.`col_varchar_key` = `test`.`t3`.`col_varchar_key`))) where ((`test`.`gp1`.`col_varchar_nokey` = `test`.`t2`.`col_varchar_key`) and (`test`.`t1`.`col_varchar_nokey` = `test`.`t2`.`col_varchar_key`) and ('k' <> `test`.`t2`.`col_varchar_key`))
|
|
SELECT gp1.id
|
|
FROM t1 AS gp1 JOIN t3 AS gp2
|
|
ON gp2.col_varchar_key <> gp1.col_varchar_nokey
|
|
WHERE (gp1.col_varchar_nokey, gp1.col_varchar_nokey)
|
|
IN (
|
|
SELECT col_varchar_nokey, col_varchar_nokey
|
|
FROM t1
|
|
WHERE col_varchar_nokey
|
|
IN ( SELECT col_varchar_key
|
|
FROM t2 LEFT JOIN t3 USING (col_varchar_key) )
|
|
)
|
|
;
|
|
id
|
|
200
|
|
DROP TABLE t1,t2,t3;
|
|
#
|
|
# Bug #13596176: Missing row on select with nested in clause when
|
|
# matr=on and bnl=off + MyISAM
|
|
#
|
|
CREATE TABLE t1 (
|
|
int_key int DEFAULT NULL,
|
|
vc_key varchar(1) DEFAULT NULL,
|
|
vc_nokey varchar(1) DEFAULT NULL,
|
|
KEY int_key (int_key),
|
|
KEY vc_key (vc_key, int_key)
|
|
) charset utf8mb4 ENGINE=MyISAM;
|
|
INSERT INTO t1 VALUES
|
|
(8,'x','x'), (7,'d','d'), (1,'r','r'), (7,'f','f'),
|
|
(9,'y','y'), (NULL,'u','u'), (1,'m','m'), (9,NULL,NULL),
|
|
(2,'o','o'), (9,'w','w'), (2,'m','m'), (4,'q','q'),
|
|
(0,NULL,NULL), (4,'d','d'), (8,'g','g'), (NULL,'x','x'),
|
|
(NULL,'f','f'), (0,'p','p'), (NULL,'j','j'), (8,'c','c');
|
|
CREATE TABLE t2 (
|
|
int_key int DEFAULT NULL,
|
|
vc_key varchar(1) DEFAULT NULL,
|
|
KEY int_key (int_key),
|
|
KEY vc_key (vc_key, int_key)
|
|
) charset utf8mb4 ENGINE=MyISAM;
|
|
INSERT INTO t2 VALUES (8,'g');
|
|
explain SELECT vc_key
|
|
FROM t1 as outr
|
|
WHERE (vc_nokey, vc_key ) IN
|
|
(SELECT vc_nokey, vc_nokey
|
|
FROM t1 middle
|
|
WHERE vc_nokey IN
|
|
(SELECT child1.vc_key
|
|
FROM t2 AS child1 JOIN t1 AS child2 USING (int_key)
|
|
)
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE child1 NULL index int_key,vc_key vc_key 12 NULL 1 100.00 Using where; Using index; Start temporary
|
|
1 SIMPLE outr NULL ref vc_key vc_key 7 test.child1.vc_key 3 10.00 Using where
|
|
1 SIMPLE middle NULL ALL NULL NULL NULL NULL 20 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE child2 NULL ref int_key int_key 5 test.child1.int_key 3 100.00 Using index; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`outr`.`vc_key` AS `vc_key` from `test`.`t1` `outr` semi join (`test`.`t1` `middle` join `test`.`t2` `child1` join `test`.`t1` `child2`) where ((`test`.`child2`.`int_key` = `test`.`child1`.`int_key`) and (`test`.`outr`.`vc_nokey` = `test`.`child1`.`vc_key`) and (`test`.`outr`.`vc_key` = `test`.`child1`.`vc_key`) and (`test`.`middle`.`vc_nokey` = `test`.`child1`.`vc_key`))
|
|
SELECT vc_key
|
|
FROM t1 as outr
|
|
WHERE (vc_nokey, vc_key ) IN
|
|
(SELECT vc_nokey, vc_nokey
|
|
FROM t1 middle
|
|
WHERE vc_nokey IN
|
|
(SELECT child1.vc_key
|
|
FROM t2 AS child1 JOIN t1 AS child2 USING (int_key)
|
|
)
|
|
);
|
|
vc_key
|
|
g
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13596176.
|
|
#
|
|
# BUG#11754478: MAX/MIN + SUBQUERY + AND FAILS TO RETURN ANY ROWS
|
|
# BUG#13599013: MAX/MIN + SUBQUERY IN WHERE CLAUSE MATCHING NO
|
|
# ROWS + INDEX DOES NOT RETURN NULL
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int(11) PRIMARY KEY,
|
|
int_key int(11),
|
|
KEY int_key (int_key)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES (1,0),(2,0),(3,2),(4,0),(5,3),(6,0);
|
|
SELECT MIN(int_key) FROM t1 WHERE (4, 4) IN (SELECT 1, 2);
|
|
MIN(int_key)
|
|
NULL
|
|
SELECT MIN(int_key) FROM t1 WHERE (4, 4) IN (SELECT 4, 4);
|
|
MIN(int_key)
|
|
0
|
|
SELECT MIN(pk) FROM t1 WHERE pk IN (SELECT int_key FROM t1) AND pk = 6;
|
|
MIN(pk)
|
|
NULL
|
|
DROP TABLE t1;
|
|
# BUG#13726217: Crash in Item_ident::fix_after_pullout()
|
|
CREATE TABLE t1(a INTEGER) engine=innodb;
|
|
INSERT INTO t1 VALUES (0);
|
|
SELECT 0
|
|
FROM t1
|
|
WHERE 0 IN
|
|
(SELECT 0
|
|
FROM t1
|
|
WHERE 0 LIKE
|
|
(SELECT elt(a, 0) AS b
|
|
FROM t1
|
|
GROUP BY a
|
|
HAVING b
|
|
)
|
|
);
|
|
0
|
|
DROP TABLE t1;
|
|
# End of test for bug#13726217.
|
|
# BUG#13773979: Missing rows on second execution of prepared statement
|
|
CREATE TABLE t1 (
|
|
col_int_nokey INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1)
|
|
);
|
|
INSERT INTO t1 VALUES
|
|
(1,7,'v'), (7,0,'s'), (4,9,'l'), (7,3,'y'),
|
|
(2,2,'i'), (9,5,'h'), (0,1,'a'), (9,3,'v');
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
SELECT *
|
|
FROM t1
|
|
WHERE col_int_key IN (
|
|
SELECT alias1.col_int_nokey AS field1
|
|
FROM v1 AS alias1
|
|
WHERE alias1.col_varchar_key < 'v'
|
|
);
|
|
col_int_nokey col_int_key col_varchar_key
|
|
1 7 v
|
|
2 2 i
|
|
4 9 l
|
|
7 0 s
|
|
prepare stmt FROM "SELECT *
|
|
FROM t1
|
|
WHERE col_int_key IN (
|
|
SELECT alias1.col_int_nokey AS field1
|
|
FROM v1 AS alias1
|
|
WHERE alias1.col_varchar_key < 'v'
|
|
)";
|
|
execute stmt;
|
|
col_int_nokey col_int_key col_varchar_key
|
|
1 7 v
|
|
2 2 i
|
|
4 9 l
|
|
7 0 s
|
|
execute stmt;
|
|
col_int_nokey col_int_key col_varchar_key
|
|
1 7 v
|
|
2 2 i
|
|
4 9 l
|
|
7 0 s
|
|
DEALLOCATE PREPARE stmt;
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
# End of test for bug#13773979.
|
|
#
|
|
# BUG#13685026 ASSERTION CUR_SJ_INNER_TABLES == 0 IN
|
|
# --OPTIMIZE_TABLE_ORDER::CHOOSE_TABLE_ORDER
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_key INT(11) NOT NULL,
|
|
col_datetime_key DATETIME NOT NULL,
|
|
col_varchar_key VARCHAR(1) NOT NULL,
|
|
col_varchar_nokey VARCHAR(1) NOT NULL,
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_datetime_key (col_datetime_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES (0,'2002-02-13 17:30:06','j','j');
|
|
INSERT INTO t1 VALUES (8,'2008-09-27 00:34:58','v','v');
|
|
CREATE TABLE t2 (
|
|
col_int_key INT(11) NOT NULL,
|
|
col_datetime_key DATETIME NOT NULL,
|
|
col_varchar_key VARCHAR(1) NOT NULL,
|
|
col_varchar_nokey VARCHAR(1) NOT NULL,
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_datetime_key (col_datetime_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t2 VALUES (7,'2003-08-21 00:00:00','b','b');
|
|
ANALYZE TABLE t1, t2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
SET @old_depth=@@optimizer_search_depth;
|
|
SET optimizer_search_depth=4;
|
|
EXPLAIN SELECT col_datetime_key
|
|
FROM t1 as outr
|
|
WHERE col_datetime_key IN (
|
|
SELECT alias1.col_datetime_key
|
|
FROM t1 AS alias1
|
|
LEFT JOIN t1 as alias3
|
|
STRAIGHT_JOIN ( t2 AS alias4
|
|
JOIN t1 AS alias5
|
|
ON alias5.col_varchar_key <= alias4.col_varchar_nokey )
|
|
ON alias5.col_int_key < alias4.col_int_key
|
|
ON alias5.col_varchar_key = alias4.col_varchar_key
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE outr NULL index col_datetime_key col_datetime_key 5 NULL 2 100.00 Using index
|
|
1 SIMPLE alias1 NULL ref col_datetime_key col_datetime_key 5 test.outr.col_datetime_key 1 100.00 Using index; Start temporary
|
|
1 SIMPLE alias4 NULL ALL col_int_key,col_varchar_key NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE alias5 NULL ref col_int_key,col_varchar_key col_varchar_key 6 test.alias4.col_varchar_key 1 100.00 Using where; Using index
|
|
1 SIMPLE alias3 NULL index NULL col_int_key 4 NULL 2 100.00 Using index; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`outr`.`col_datetime_key` AS `col_datetime_key` from `test`.`t1` `outr` semi join (`test`.`t1` `alias1` left join (`test`.`t1` `alias3` join `test`.`t2` `alias4` join `test`.`t1` `alias5`) on(((`test`.`alias5`.`col_varchar_key` = `test`.`alias4`.`col_varchar_key`) and (`test`.`alias5`.`col_int_key` < `test`.`alias4`.`col_int_key`) and (`test`.`alias5`.`col_varchar_key` <= `test`.`alias4`.`col_varchar_nokey`)))) where (`test`.`alias1`.`col_datetime_key` = `test`.`outr`.`col_datetime_key`)
|
|
SELECT col_datetime_key
|
|
FROM t1 as outr
|
|
WHERE col_datetime_key IN (
|
|
SELECT alias1.col_datetime_key
|
|
FROM t1 AS alias1
|
|
LEFT JOIN t1 as alias3
|
|
STRAIGHT_JOIN ( t2 AS alias4
|
|
JOIN t1 AS alias5
|
|
ON alias5.col_varchar_key <= alias4.col_varchar_nokey )
|
|
ON alias5.col_int_key < alias4.col_int_key
|
|
ON alias5.col_varchar_key = alias4.col_varchar_key
|
|
);
|
|
col_datetime_key
|
|
2002-02-13 17:30:06
|
|
2008-09-27 00:34:58
|
|
DROP TABLE t1,t2;
|
|
SET @@optimizer_search_depth=@old_depth;
|
|
#
|
|
# BUG#13848789: SEGFAULT IN JOIN_READ_NEXT_SAME AT
|
|
# SQL/SQL_EXECUTOR.CC ON HAVING...IN...JOIN
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES (8,'x');
|
|
CREATE TABLE t2 (
|
|
col_varchar_key VARCHAR(1),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES ('x'), ('y');
|
|
explain SELECT MIN(col_int_key)
|
|
FROM t1 as t1_outer
|
|
HAVING (1, 2) IN (
|
|
SELECT t1_inner.col_int_key, MAX(t1_inner.col_int_key)
|
|
FROM t1 as t1_inner JOIN t2
|
|
ON t2.col_varchar_key = t1_inner.col_varchar_key
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible HAVING
|
|
2 SUBQUERY t1_inner NULL system col_varchar_key NULL NULL NULL 1 100.00 NULL
|
|
2 SUBQUERY t2 NULL ref col_varchar_key col_varchar_key 7 const 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select min(`test`.`t1_outer`.`col_int_key`) AS `MIN(col_int_key)` from `test`.`t1` `t1_outer` having false
|
|
SELECT MIN(col_int_key)
|
|
FROM t1 as t1_outer
|
|
HAVING (1, 2) IN (
|
|
SELECT t1_inner.col_int_key, MAX(t1_inner.col_int_key)
|
|
FROM t1 as t1_inner JOIN t2
|
|
ON t2.col_varchar_key = t1_inner.col_varchar_key
|
|
);
|
|
MIN(col_int_key)
|
|
DROP TABLE t1,t2;
|
|
# Bug#13838810: Segfault in evaluate_null_complemented_join_record
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
col_int_nokey int DEFAULT NULL,
|
|
col_int_key int DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (10,NULL,8,'x');
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (1,'x');
|
|
CREATE TABLE t3 (
|
|
pk int NOT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t3 VALUES
|
|
(1,'v','v'), (2,'v','v'), (3,'c','c'), (4,NULL,NULL);
|
|
EXPLAIN SELECT table1.pk,table2.pk, table3.pk
|
|
FROM t2 AS table1
|
|
LEFT JOIN t1 AS table2
|
|
LEFT JOIN t1 AS table3
|
|
ON table3.col_int_key = table2.col_int_key
|
|
ON table3.pk = table2.col_int_nokey AND
|
|
table1.col_varchar_nokey IN (
|
|
SELECT subquery3_t1.col_varchar_nokey
|
|
FROM t3 AS subquery3_t1
|
|
LEFT JOIN t1 AS subquery3_t2
|
|
ON subquery3_t2.col_varchar_key = subquery3_t1.col_varchar_key
|
|
WHERE subquery3_t2.col_int_nokey <> 9
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE table1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE table2 NULL ALL col_int_key NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE table3 NULL eq_ref PRIMARY,col_int_key PRIMARY 4 test.table2.col_int_nokey 1 100.00 Using where
|
|
1 SIMPLE subquery3_t2 NULL ALL col_varchar_key NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE subquery3_t1 NULL ref col_varchar_key col_varchar_key 7 test.subquery3_t2.col_varchar_key 1 100.00 Using where; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`table1`.`pk` AS `pk`,`test`.`table2`.`pk` AS `pk`,`test`.`table3`.`pk` AS `pk` from `test`.`t2` `table1` left join (`test`.`t1` `table2` join `test`.`t1` `table3` semi join (`test`.`t3` `subquery3_t1` join `test`.`t1` `subquery3_t2`)) on(((`test`.`table3`.`col_int_key` = `test`.`table2`.`col_int_key`) and (`test`.`subquery3_t1`.`col_varchar_key` = `test`.`subquery3_t2`.`col_varchar_key`) and (`test`.`subquery3_t1`.`col_varchar_nokey` = `test`.`table1`.`col_varchar_nokey`) and (`test`.`table3`.`pk` = `test`.`table2`.`col_int_nokey`) and (`test`.`subquery3_t2`.`col_int_nokey` <> 9))) where true
|
|
SELECT table1.pk,table2.pk, table3.pk
|
|
FROM t2 AS table1
|
|
LEFT JOIN t1 AS table2
|
|
LEFT JOIN t1 AS table3
|
|
ON table3.col_int_key = table2.col_int_key
|
|
ON table3.pk = table2.col_int_nokey AND
|
|
table1.col_varchar_nokey IN (
|
|
SELECT subquery3_t1.col_varchar_nokey
|
|
FROM t3 AS subquery3_t1
|
|
LEFT JOIN t1 AS subquery3_t2
|
|
ON subquery3_t2.col_varchar_key = subquery3_t1.col_varchar_key
|
|
WHERE subquery3_t2.col_int_nokey <> 9
|
|
)
|
|
;
|
|
pk pk pk
|
|
1 NULL NULL
|
|
DROP TABLE t1, t2, t3;
|
|
Extra test case for specific code coverage
|
|
CREATE TABLE t1(pk INTEGER);
|
|
INSERT INTO t1 VALUES(1), (2);
|
|
explain SELECT *
|
|
FROM t1 AS ot1 LEFT JOIN t1 AS ot2
|
|
ON ot1.pk=ot2.pk AND
|
|
ot2.pk IN
|
|
(SELECT it1.pk
|
|
FROM t1 AS it1 LEFT JOIN t1 AS it2 ON it1.pk=it2.pk);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE ot1 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE ot2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it1 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE it2 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`pk` AS `pk`,`test`.`ot2`.`pk` AS `pk` from `test`.`t1` `ot1` left join (`test`.`t1` `ot2` semi join (`test`.`t1` `it1` left join `test`.`t1` `it2` on((`test`.`it1`.`pk` = `test`.`it2`.`pk`)))) on(((`test`.`ot2`.`pk` = `test`.`ot1`.`pk`) and (`test`.`it1`.`pk` = `test`.`ot1`.`pk`))) where true
|
|
SELECT *
|
|
FROM t1 AS ot1 LEFT JOIN t1 AS ot2
|
|
ON ot1.pk=ot2.pk AND
|
|
ot2.pk IN
|
|
(SELECT it1.pk
|
|
FROM t1 AS it1 LEFT JOIN t1 AS it2 ON it1.pk=it2.pk);
|
|
pk pk
|
|
1 1
|
|
2 2
|
|
DROP TABLE t1;
|
|
# End of test for bug#13838810.
|
|
#
|
|
# Bug#13845930: Segfault in st_join_table::and_with_condition
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int INTEGER
|
|
);
|
|
CREATE TABLE t2 (
|
|
col_varchar_1 VARCHAR(1),
|
|
col_varchar_2 VARCHAR(1)
|
|
);
|
|
INSERT INTO t2 VALUES ('x','x'), ('c','c');
|
|
PREPARE stmt FROM '
|
|
SELECT alias2.col_varchar_2 AS field1
|
|
FROM t2 AS alias1
|
|
JOIN
|
|
(t2 AS alias2
|
|
LEFT JOIN t2 AS alias3
|
|
ON (8, 92) IN
|
|
(SELECT sq1_alias1.col_int,
|
|
sq1_alias2.col_int
|
|
FROM t1 AS sq1_alias1 JOIN t1 AS sq1_alias2
|
|
)
|
|
)
|
|
ON alias3.col_varchar_1 = alias2.col_varchar_2
|
|
';
|
|
EXECUTE stmt;
|
|
field1
|
|
EXECUTE stmt;
|
|
field1
|
|
DEALLOCATE prepare stmt;
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13845930.
|
|
#
|
|
# Bug#13855925: Assert 'prebuilt->search_tuple->n_fields > 0'
|
|
# in ha_innobase::index_read
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_int_nokey INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
PRIMARY KEY (pk),
|
|
KEY (col_varchar_key)
|
|
) charset utf8mb4 ENGINE=INNODB;
|
|
INSERT INTO t1 (
|
|
col_int_key, col_int_nokey,
|
|
col_varchar_key, col_varchar_nokey
|
|
) VALUES
|
|
(4, 2, 'v','v'), (62, 150, 'v','v'), (7, NULL, 'c','c'), (1, 2, NULL, NULL),
|
|
(0, 5, 'x','x'), (7, 3, 'i','i'), (7, 1, 'e','e'), (1, 4, 'p','p'),
|
|
(7, NULL, 's','s'), (1, 2, 'j','j'), (5, 6, 'z','z'), (2, 6, 'c','c'),
|
|
(0, 8, 'a','a'), (1, 2, 'q','q'), (8, 6, 'y','y'), (1, 8, NULL, NULL),
|
|
(1, 3, 'r','r'), (9, 3, 'v','v'), (1, 9, NULL, NULL), (5, 6, 'r','r');
|
|
CREATE TABLE t2 (
|
|
pk INT AUTO_INCREMENT,
|
|
col_int_nokey INT,
|
|
col_int_key INT,
|
|
PRIMARY KEY (pk),
|
|
KEY (col_int_key)
|
|
) charset utf8mb4 AUTO_INCREMENT=10 ENGINE=INNODB;
|
|
INSERT INTO t2 (col_int_key, col_int_nokey) VALUES
|
|
(8, NULL), (7, 8), (1, 1), (7, 9), (9, 4), (NULL, 3), (1, 2), (9, NULL),
|
|
(2, 2), (9, NULL), (2, 6), (4, 7), (0, 2), (4, 5), (8, 7), (NULL, 6),
|
|
(NULL, 6), (0, 2), (NULL, 9), (8, 6);
|
|
CREATE TABLE t3 (
|
|
pk INT AUTO_INCREMENT,
|
|
col_varchar_key VARCHAR(1),
|
|
PRIMARY KEY (pk),
|
|
KEY (col_varchar_key)
|
|
) charset utf8mb4 ENGINE=INNODB;
|
|
INSERT INTO t3 (col_varchar_key) VALUES
|
|
('c'), ('c'), ('q'), ('g'), ('e'), ('l'), (NULL), ('c'), ('h'), ('d'),
|
|
('c'), ('i'), ('t'), ('g'), ('q'), ('l'), ('n'), ('z'), ('n'), ('r'), ('p');
|
|
CREATE VIEW v1 AS
|
|
SELECT table2.col_varchar_nokey AS field1
|
|
FROM t2 AS table1
|
|
INNER JOIN (t1 AS table2
|
|
STRAIGHT_JOIN t2 AS table3
|
|
ON table3.col_int_key = table2.pk AND
|
|
table3.col_int_nokey = ANY
|
|
(SELECT subquery1_t2.col_int_nokey AS subquery1_field1
|
|
FROM t2 AS subquery1_t1
|
|
RIGHT OUTER JOIN t1 AS subquery1_t2
|
|
INNER JOIN t1 AS subquery1_t3
|
|
ON subquery1_t3.col_int_key = subquery1_t2.pk
|
|
ON subquery1_t3.col_varchar_key=subquery1_t2.col_varchar_nokey
|
|
WHERE subquery1_t1.pk > 1
|
|
)
|
|
)
|
|
ON table3.col_int_key IN
|
|
(SELECT subquery2_t1.col_int_key AS subquery2_field1
|
|
FROM t2 AS subquery2_t1
|
|
RIGHT OUTER JOIN t3 AS subquery2_t2
|
|
LEFT OUTER JOIN t1 AS subquery2_t3
|
|
ON subquery2_t3.col_varchar_key = subquery2_t2.col_varchar_key
|
|
ON subquery2_t3.pk = subquery2_t2.pk
|
|
)
|
|
;
|
|
explain SELECT * FROM v1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE subquery2_t3 NULL index PRIMARY,col_varchar_key col_varchar_key 7 NULL 20 100.00 Using where; Using index; Start temporary
|
|
1 SIMPLE subquery2_t2 NULL eq_ref PRIMARY,col_varchar_key PRIMARY 4 test.subquery2_t3.pk 1 7.14 Using where
|
|
1 SIMPLE subquery1_t3 NULL ALL col_varchar_key NULL NULL NULL 20 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE subquery1_t2 NULL eq_ref PRIMARY PRIMARY 4 test.subquery1_t3.col_int_key 1 10.00 Using where
|
|
1 SIMPLE subquery2_t1 NULL range col_int_key col_int_key 5 NULL 16 100.00 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE table2 NULL eq_ref PRIMARY PRIMARY 4 test.subquery2_t1.col_int_key 1 100.00 NULL
|
|
1 SIMPLE table3 NULL ref col_int_key col_int_key 5 test.subquery2_t1.col_int_key 2 10.00 Using where
|
|
1 SIMPLE subquery1_t1 NULL index PRIMARY col_int_key 5 NULL 20 100.00 Using where; Using index; End temporary; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE table1 NULL index NULL col_int_key 5 NULL 20 100.00 Using index; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `table2`.`col_varchar_nokey` AS `field1` from `test`.`t2` `table1` join `test`.`t1` `table2` straight_join `test`.`t2` `table3` semi join (`test`.`t1` `subquery1_t2` join `test`.`t1` `subquery1_t3` join `test`.`t2` `subquery1_t1`) semi join (`test`.`t3` `subquery2_t2` join `test`.`t1` `subquery2_t3` join `test`.`t2` `subquery2_t1`) where ((`subquery1_t2`.`pk` = `subquery1_t3`.`col_int_key`) and (`subquery1_t2`.`col_varchar_nokey` = `subquery1_t3`.`col_varchar_key`) and (`subquery2_t2`.`col_varchar_key` = `subquery2_t3`.`col_varchar_key`) and (`subquery2_t2`.`pk` = `subquery2_t3`.`pk`) and (`table2`.`pk` = `subquery2_t1`.`col_int_key`) and (`table3`.`col_int_key` = `subquery2_t1`.`col_int_key`) and (`table3`.`col_int_nokey` = `subquery1_t2`.`col_int_nokey`) and (`subquery1_t1`.`pk` > 1))
|
|
SELECT * FROM v1;
|
|
field1
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
v
|
|
DROP VIEW v1;
|
|
DROP TABLE t1,t2,t3;
|
|
# End of test for bug#13855925.
|
|
#
|
|
# Bug#13897959: Segfault in setup_semijoin_dups_elimination()
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_datetime_key DATETIME DEFAULT NULL,
|
|
KEY col_datetime_key (col_datetime_key)
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO t1 VALUES
|
|
('2001-04-18 00:00:00'), ('2008-12-18 19:39:55'),
|
|
('2000-08-01 12:19:39'), ('2004-09-25 21:29:06'),
|
|
('2009-09-20 09:11:48'), ('2004-03-27 09:32:04');
|
|
CREATE TABLE t2 (
|
|
col_date_nokey date DEFAULT NULL,
|
|
col_time_key time DEFAULT NULL,
|
|
col_datetime_key datetime DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY col_time_key (col_time_key),
|
|
KEY col_datetime_key (col_datetime_key),
|
|
KEY col_varchar_key(col_varchar_key)
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO t2 VALUES ('1900-01-01',NULL,'2001-11-04 19:07:55','x','x');
|
|
SELECT grandparent1.col_varchar_nokey
|
|
FROM t2 AS grandparent1 LEFT JOIN t1 USING (col_datetime_key)
|
|
WHERE grandparent1.col_varchar_nokey IN (
|
|
SELECT col_varchar_nokey
|
|
FROM t2 AS parent1
|
|
WHERE parent1.col_time_key > grandparent1.col_date_nokey
|
|
);
|
|
col_varchar_nokey
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13897959.
|
|
#
|
|
# Bug#13898625 ASSERT `(REMAINING_TABLES_AFTER != 0) ...' IN
|
|
# BEST_EXTENSION_BY_LIMITED_SEARCH
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int(11) NOT NULL,
|
|
col_int_nokey INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES (26,6,NULL,'f','f');
|
|
INSERT INTO t1 VALUES (29,6,8,'c','c');
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL,
|
|
col_int_nokey INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES (1,2,4,'v','v');
|
|
INSERT INTO t2 VALUES (2,150,62,'v','v');
|
|
INSERT INTO t2 VALUES (5,5,0,'x','x');
|
|
INSERT INTO t2 VALUES (6,3,7,'i','i');
|
|
INSERT INTO t2 VALUES (7,1,7,'e','e');
|
|
CREATE VIEW view_c AS SELECT * FROM t2;
|
|
PREPARE prep_stmt_7430 FROM 'SELECT SUM( alias1.col_varchar_key ) AS field1
|
|
FROM t1 AS alias1
|
|
RIGHT JOIN t2 AS alias2
|
|
INNER JOIN t1 AS alias3
|
|
ON (alias3.col_varchar_key = alias2.col_varchar_key )
|
|
ON ( "v" ) IN (
|
|
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
|
|
FROM t1 AS sq1_alias1
|
|
)
|
|
WHERE alias3.pk IN (
|
|
SELECT sq2_alias1.col_int_key AS sq2_field1
|
|
FROM ( view_c AS sq2_alias1, t1 AS sq2_alias2 )
|
|
)
|
|
';
|
|
EXECUTE prep_stmt_7430;
|
|
field1
|
|
NULL
|
|
EXECUTE prep_stmt_7430;
|
|
field1
|
|
NULL
|
|
EXPLAIN SELECT SUM( alias1.col_varchar_key ) AS field1
|
|
FROM t1 AS alias1
|
|
RIGHT JOIN t2 AS alias2
|
|
INNER JOIN t1 AS alias3
|
|
ON (alias3.col_varchar_key = alias2.col_varchar_key )
|
|
ON ( "v" ) IN (
|
|
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
|
|
FROM t1 AS sq1_alias1
|
|
)
|
|
WHERE alias3.pk IN (
|
|
SELECT sq2_alias1.col_int_key AS sq2_field1
|
|
FROM ( view_c AS sq2_alias1, t1 AS sq2_alias2 )
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE alias3 NULL ALL PRIMARY,col_varchar_key NULL NULL NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE alias2 NULL ref col_varchar_key col_varchar_key 7 test.alias3.col_varchar_key 2 100.00 Using index
|
|
1 SIMPLE t2 NULL ref col_int_key col_int_key 5 test.alias3.pk 2 100.00 Using index
|
|
1 SIMPLE sq2_alias2 NULL index NULL PRIMARY 4 NULL 2 100.00 Using index; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE sq1_alias1 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE alias1 NULL index NULL col_varchar_key 12 NULL 2 100.00 Using index; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select sum(`test`.`alias1`.`col_varchar_key`) AS `field1` from `test`.`t2` `alias2` join `test`.`t1` `alias3` left join (`test`.`t1` `alias1` semi join (`test`.`t1` `sq1_alias1`)) on(((`test`.`sq1_alias1`.`col_varchar_nokey` = 'v'))) semi join (`test`.`t2` join `test`.`t1` `sq2_alias2`) where ((`test`.`alias2`.`col_varchar_key` = `test`.`alias3`.`col_varchar_key`) and (`test`.`t2`.`col_int_key` = `test`.`alias3`.`pk`))
|
|
PREPARE prep_stmt_7430 FROM 'SELECT SUM( alias1.col_varchar_key ) AS field1
|
|
FROM t1 AS alias1
|
|
RIGHT JOIN t2 AS alias2
|
|
INNER JOIN t1 AS alias3
|
|
ON (alias3.col_varchar_key = alias2.col_varchar_key )
|
|
ON ( "v" ) IN (
|
|
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
|
|
FROM t1 AS sq1_alias1
|
|
)
|
|
WHERE alias3.pk IN (
|
|
SELECT sq2_alias1.col_int_key AS sq2_field1
|
|
FROM ( view_c AS sq2_alias1 , t1 AS sq2_alias2 )
|
|
WHERE sq2_alias1.col_varchar_nokey <> alias2.col_varchar_key
|
|
AND sq2_alias1.col_varchar_key < "l"
|
|
)
|
|
';
|
|
EXECUTE prep_stmt_7430;
|
|
field1
|
|
NULL
|
|
EXECUTE prep_stmt_7430;
|
|
field1
|
|
NULL
|
|
EXPLAIN SELECT SUM( alias1.col_varchar_key ) AS field1
|
|
FROM t1 AS alias1
|
|
RIGHT JOIN t2 AS alias2
|
|
INNER JOIN t1 AS alias3
|
|
ON (alias3.col_varchar_key = alias2.col_varchar_key )
|
|
ON ( "v" ) IN (
|
|
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
|
|
FROM t1 AS sq1_alias1
|
|
)
|
|
WHERE alias3.pk IN (
|
|
SELECT sq2_alias1.col_int_key AS sq2_field1
|
|
FROM ( view_c AS sq2_alias1 , t1 AS sq2_alias2 )
|
|
WHERE sq2_alias1.col_varchar_nokey <> alias2.col_varchar_key
|
|
AND sq2_alias1.col_varchar_key < "l"
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE alias3 NULL ALL PRIMARY,col_varchar_key NULL NULL NULL 2 100.00 Using where; Start temporary
|
|
1 SIMPLE t2 NULL ref col_int_key,col_varchar_key col_int_key 5 test.alias3.pk 2 40.00 Using where
|
|
1 SIMPLE alias2 NULL ref col_varchar_key col_varchar_key 7 test.alias3.col_varchar_key 2 100.00 Using index
|
|
1 SIMPLE sq2_alias2 NULL index NULL PRIMARY 4 NULL 2 100.00 Using index; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE sq1_alias1 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE alias1 NULL index NULL col_varchar_key 12 NULL 2 100.00 Using index; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.alias2.col_varchar_key' of SELECT #3 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select sum(`test`.`alias1`.`col_varchar_key`) AS `field1` from `test`.`t2` `alias2` join `test`.`t1` `alias3` left join (`test`.`t1` `alias1` semi join (`test`.`t1` `sq1_alias1`)) on(((`test`.`sq1_alias1`.`col_varchar_nokey` = 'v'))) semi join (`test`.`t2` join `test`.`t1` `sq2_alias2`) where ((`test`.`alias2`.`col_varchar_key` = `test`.`alias3`.`col_varchar_key`) and (`test`.`t2`.`col_int_key` = `test`.`alias3`.`pk`) and (`test`.`t2`.`col_varchar_nokey` <> `test`.`alias3`.`col_varchar_key`) and (`test`.`t2`.`col_varchar_key` < 'l'))
|
|
DROP TABLE t1,t2;
|
|
DROP VIEW view_c;
|
|
#
|
|
# Bug#13902463 SEGFAULT IN BITMAP<64U>::MERGE OR ADD_KEY_FIELD
|
|
# ON SECOND EXEC OF PREP STMT
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INT,
|
|
col_int_nokey INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
);
|
|
CREATE VIEW view_b AS SELECT * FROM t1;
|
|
PREPARE prep_stmt_20421 FROM 'SELECT alias2.col_varchar_nokey AS field1
|
|
FROM t1 AS alias1
|
|
INNER JOIN t1 AS alias2
|
|
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
|
|
AND ( alias1.col_int_key ) IN (
|
|
SELECT t1.col_int_nokey
|
|
FROM t1
|
|
)
|
|
)
|
|
WHERE alias1.col_varchar_key IN (
|
|
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
|
|
FROM view_b AS sq2_alias1
|
|
INNER JOIN t1 AS sq2_alias2
|
|
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
|
|
WHERE sq2_alias1.pk > alias2.pk
|
|
)
|
|
';
|
|
EXECUTE prep_stmt_20421;
|
|
field1
|
|
EXECUTE prep_stmt_20421;
|
|
field1
|
|
EXPLAIN SELECT alias2.col_varchar_nokey AS field1
|
|
FROM t1 AS alias1
|
|
INNER JOIN t1 AS alias2
|
|
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
|
|
AND ( alias1.col_int_key ) IN (
|
|
SELECT t1.col_int_nokey
|
|
FROM t1
|
|
)
|
|
)
|
|
WHERE alias1.col_varchar_key IN (
|
|
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
|
|
FROM view_b AS sq2_alias1
|
|
INNER JOIN t1 AS sq2_alias2
|
|
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
|
|
WHERE sq2_alias1.pk > alias2.pk
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.alias2.pk' of SELECT #3 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `field1` from `test`.`t1` `alias1` join `test`.`t1` `alias2` semi join (`test`.`t1`) semi join (`test`.`t1` join `test`.`t1` `sq2_alias2`) where ((`test`.`t1`.`pk` > NULL) and multiple equal(NULL, `test`.`sq2_alias2`.`col_varchar_nokey`, NULL) and multiple equal(`test`.`sq2_alias2`.`col_varchar_key`, `test`.`t1`.`col_varchar_key`) and multiple equal(NULL, `test`.`t1`.`col_int_nokey`))
|
|
ALTER TABLE t1 DROP INDEX col_varchar_key;
|
|
PREPARE prep_stmt_20421 FROM 'SELECT alias2.col_varchar_nokey AS field1
|
|
FROM t1 AS alias1
|
|
INNER JOIN t1 AS alias2
|
|
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
|
|
AND ( alias1.col_int_key ) IN (
|
|
SELECT t1.col_int_nokey
|
|
FROM t1
|
|
)
|
|
)
|
|
WHERE alias1.col_varchar_key IN (
|
|
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
|
|
FROM view_b AS sq2_alias1
|
|
INNER JOIN t1 AS sq2_alias2
|
|
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
|
|
WHERE sq2_alias1.pk > alias2.pk
|
|
)
|
|
';
|
|
EXECUTE prep_stmt_20421;
|
|
field1
|
|
EXECUTE prep_stmt_20421;
|
|
field1
|
|
EXPLAIN SELECT alias2.col_varchar_nokey AS field1
|
|
FROM t1 AS alias1
|
|
INNER JOIN t1 AS alias2
|
|
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
|
|
AND ( alias1.col_int_key ) IN (
|
|
SELECT t1.col_int_nokey
|
|
FROM t1
|
|
)
|
|
)
|
|
WHERE alias1.col_varchar_key IN (
|
|
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
|
|
FROM view_b AS sq2_alias1
|
|
INNER JOIN t1 AS sq2_alias2
|
|
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
|
|
WHERE sq2_alias1.pk > alias2.pk
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.alias2.pk' of SELECT #3 was resolved in SELECT #1
|
|
Note 1003 /* select#1 */ select NULL AS `field1` from `test`.`t1` `alias1` join `test`.`t1` `alias2` semi join (`test`.`t1`) semi join (`test`.`t1` join `test`.`t1` `sq2_alias2`) where ((`test`.`t1`.`pk` > NULL) and multiple equal(NULL, `test`.`sq2_alias2`.`col_varchar_nokey`, NULL) and multiple equal(`test`.`sq2_alias2`.`col_varchar_key`, `test`.`t1`.`col_varchar_key`) and multiple equal(NULL, `test`.`t1`.`col_int_nokey`))
|
|
DROP TABLE t1;
|
|
DROP VIEW view_b;
|
|
#
|
|
# Bug#13907277: Segfault in evaluate_null_complemented_join_record
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER,
|
|
col_varchar_nokey VARCHAR(1),
|
|
col_varchar_key VARCHAR(1),
|
|
PRIMARY KEY (pk)
|
|
);
|
|
INSERT INTO t1 VALUES (1, 'x', 'x');
|
|
CREATE TABLE t2 (
|
|
pk INTEGER,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
INSERT INTO t2 VALUES (1);
|
|
CREATE TABLE t3 (
|
|
pk INTEGER,
|
|
col_int_nokey INTEGER,
|
|
col_int_key INTEGER,
|
|
col_varchar_nokey VARCHAR(1),
|
|
PRIMARY KEY (pk)
|
|
);
|
|
INSERT INTO t3 VALUES (1, 6, 5, 'r');
|
|
explain SELECT outer_t1.pk, outer_t2.pk
|
|
FROM t3 AS outer_t1
|
|
RIGHT JOIN t2 AS outer_t2
|
|
ON outer_t1.col_int_nokey IN
|
|
(SELECT inner_t1.col_int_nokey
|
|
FROM t3 AS inner_t1
|
|
LEFT JOIN t1 AS inner_t2
|
|
INNER JOIN t1 AS inner_t3
|
|
ON inner_t3.pk = inner_t2.pk
|
|
ON inner_t3.col_varchar_nokey = inner_t2.col_varchar_key
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE outer_t2 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE outer_t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE inner_t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
1 SIMPLE inner_t2 NULL ALL PRIMARY NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE inner_t3 NULL eq_ref PRIMARY PRIMARY 4 test.inner_t2.pk 1 100.00 Using where; End temporary
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`outer_t1`.`pk` AS `pk`,'1' AS `pk` from <constant table> left join (`test`.`t3` `outer_t1` semi join (`test`.`t3` `inner_t1` left join (`test`.`t1` `inner_t2` join `test`.`t1` `inner_t3`) on(((`test`.`inner_t3`.`col_varchar_nokey` = `test`.`inner_t2`.`col_varchar_key`) and (`test`.`inner_t3`.`pk` = `test`.`inner_t2`.`pk`))))) on(((`test`.`inner_t1`.`col_int_nokey` = `test`.`outer_t1`.`col_int_nokey`))) where true
|
|
SELECT outer_t1.pk, outer_t2.pk
|
|
FROM t3 AS outer_t1
|
|
RIGHT JOIN t2 AS outer_t2
|
|
ON outer_t1.col_int_nokey IN
|
|
(SELECT inner_t1.col_int_nokey
|
|
FROM t3 AS inner_t1
|
|
LEFT JOIN t1 AS inner_t2
|
|
INNER JOIN t1 AS inner_t3
|
|
ON inner_t3.pk = inner_t2.pk
|
|
ON inner_t3.col_varchar_nokey = inner_t2.col_varchar_key
|
|
);
|
|
pk pk
|
|
1 1
|
|
DROP TABLE t1, t2, t3;
|
|
# End of test for bug#13907277.
|
|
#
|
|
# Bug#13955713: Assert 'JOIN->best_read < ...' on second execution
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1)
|
|
);
|
|
PREPARE stmt FROM "
|
|
SELECT MIN(alias2.col_varchar_key) AS field1
|
|
FROM t1 AS alias1
|
|
INNER JOIN (t1 AS alias2
|
|
INNER JOIN t1 AS alias3
|
|
ON 8 IN
|
|
(SELECT sq1_alias1.pk AS sq1_field2
|
|
FROM t1 AS sq1_alias1
|
|
WHERE 9 IN
|
|
(SELECT SUM(t1_sq1_alias1.pk) AS t1_sq1_field2
|
|
FROM t1 AS t1_sq1_alias1
|
|
)
|
|
)
|
|
)
|
|
ON alias3.col_varchar_nokey = alias2.col_varchar_key
|
|
WHERE EXISTS
|
|
(SELECT sq2_alias1.pk AS sq2_field1
|
|
FROM t1 AS sq2_alias1
|
|
WHERE sq2_alias1.col_varchar_key < alias1.col_varchar_nokey
|
|
)
|
|
";
|
|
EXECUTE stmt;
|
|
field1
|
|
NULL
|
|
EXECUTE stmt;
|
|
field1
|
|
NULL
|
|
DEALLOCATE PREPARE stmt;
|
|
DROP TABLE t1;
|
|
# End of test for bug#13955713.
|
|
#
|
|
# Bug#13956813: Segfault in memcpy from Join_cache::write_record_data()
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1)
|
|
) charset latin1;
|
|
CREATE TABLE t2 (
|
|
pk INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1)
|
|
) charset latin1;
|
|
INSERT INTO t2 VALUES
|
|
(10,'j','j'), (11,'z','z'), (12,'c','c'), (13,'a','a'),
|
|
(14,'q','q'), (15,'y','y'), (16,NULL,NULL), (17,'r','r'),
|
|
(18,'v','v'), (19,NULL,NULL), (20,'r','r');
|
|
CREATE TABLE t3 (
|
|
pk INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
KEY col_int_key (col_int_key)
|
|
) charset latin1;
|
|
INSERT INTO t3 VALUES
|
|
(15,NULL,'u'), (16,1,'m'), (17,9,NULL), (18,2,'o'),
|
|
(19,9,'w'), (20,2,'m'), (21,4,'q'), (22,0,NULL),
|
|
(23,4,'d'), (24,8,'g'), (25,NULL,'x'), (26,NULL,'f'),
|
|
(27,0,'p'), (28,NULL,'j'), (29,8,'c');
|
|
CREATE VIEW view_inline_0 AS
|
|
SELECT t1.*
|
|
FROM t1 INNER JOIN t3
|
|
ON t1.pk = t3.pk;
|
|
CREATE VIEW view_inline_1 AS
|
|
SELECT sq2_alias2.col_varchar_key AS sq2_field1,
|
|
sq2_alias1.col_varchar_key AS sq2_field2
|
|
FROM t3 AS sq2_alias1 LEFT OUTER JOIN t3 AS sq2_alias2
|
|
ON sq2_alias1.pk = sq2_alias2.col_int_key;
|
|
CREATE VIEW view_inline_2 AS
|
|
SELECT 'p', 'p' UNION SELECT 'k', 's';
|
|
SET @optimizer_switch_saved= @@optimizer_switch;
|
|
SET @@optimizer_switch="derived_merge=off";
|
|
explain SELECT SUM(alias1.col_varchar_nokey) AS field2
|
|
FROM t2 AS alias2
|
|
LEFT JOIN (SELECT * FROM view_inline_0) AS alias1
|
|
ON alias2.col_varchar_key = alias1.col_varchar_key AND
|
|
(alias2.col_varchar_nokey, alias2.col_varchar_key) IN
|
|
(SELECT * FROM view_inline_1
|
|
)
|
|
WHERE (alias1.col_varchar_key, alias1.col_varchar_nokey) IN
|
|
(SELECT * FROM view_inline_2
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY <derived7> NULL ALL <auto_distinct_key> NULL NULL NULL 2 100.00 NULL
|
|
1 PRIMARY alias2 NULL ALL NULL NULL NULL NULL 11 10.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 PRIMARY <derived6> NULL ref <auto_key0> <auto_key0> 8 test.alias2.col_varchar_nokey,view_inline_2.p 3 100.00 Using index; Start temporary; End temporary
|
|
1 PRIMARY <derived2> NULL ref <auto_key0> <auto_key0> 8 view_inline_2.p,view_inline_2.My_exp_p 2 100.00 NULL
|
|
7 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
|
8 UNION NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
|
NULL UNION RESULT <union7,8> NULL ALL NULL NULL NULL NULL NULL NULL Using temporary
|
|
6 DERIVED sq2_alias1 NULL ALL NULL NULL NULL NULL 15 100.00 NULL
|
|
6 DERIVED sq2_alias2 NULL ref col_int_key col_int_key 5 test.sq2_alias1.pk 2 100.00 NULL
|
|
2 DERIVED <derived5> NULL ALL NULL NULL NULL NULL 15 100.00 NULL
|
|
5 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select sum(`alias1`.`col_varchar_nokey`) AS `field2` from `test`.`view_inline_2` join `test`.`t2` `alias2` join (/* select#2 */ select `view_inline_0`.`pk` AS `pk`,`view_inline_0`.`col_varchar_key` AS `col_varchar_key`,`view_inline_0`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`view_inline_0`) `alias1` semi join (`test`.`view_inline_1`) where ((`view_inline_1`.`sq2_field1` = `test`.`alias2`.`col_varchar_nokey`) and (`alias1`.`col_varchar_nokey` = `view_inline_2`.`My_exp_p`) and (`test`.`alias2`.`col_varchar_key` = `view_inline_2`.`p`) and (`view_inline_1`.`sq2_field2` = `view_inline_2`.`p`) and (`alias1`.`col_varchar_key` = `view_inline_2`.`p`))
|
|
SELECT SUM(alias1.col_varchar_nokey) AS field2
|
|
FROM t2 AS alias2
|
|
LEFT JOIN (SELECT * FROM view_inline_0) AS alias1
|
|
ON alias2.col_varchar_key = alias1.col_varchar_key AND
|
|
(alias2.col_varchar_nokey, alias2.col_varchar_key) IN
|
|
(SELECT * FROM view_inline_1
|
|
)
|
|
WHERE (alias1.col_varchar_key, alias1.col_varchar_nokey) IN
|
|
(SELECT * FROM view_inline_2
|
|
);
|
|
field2
|
|
NULL
|
|
SET @@optimizer_switch= @optimizer_switch_saved;
|
|
DROP VIEW view_inline_0, view_inline_1, view_inline_2;
|
|
DROP TABLE t1, t2, t3;
|
|
# End of test for bug#13956813.
|
|
#
|
|
# Bug#13974177: Assert !(tab->table->regginfo.not_exists_optimize...
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_int_nokey INTEGER,
|
|
col_int_key INTEGER,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
PRIMARY KEY (pk),
|
|
KEY (col_int_key),
|
|
KEY (col_varchar_key, col_int_key)
|
|
);
|
|
INSERT INTO t1(col_int_key, col_int_nokey, col_varchar_key, col_varchar_nokey)
|
|
VALUES
|
|
(0, 4, 'j', 'j'), (8, 6, 'v', 'v'), (1, 3, 'c', 'c'), (8, 5, 'm', 'm'),
|
|
(9, 3, 'd', 'd'), (24, 246, 'd', 'd'), (6, 2, 'y', 'y'), (1, 9, 't', 't'),
|
|
(6, 3, 'd', 'd'), (2, 8, 's', 's'), (4, 1, 'r', 'r'), (8, 8, 'm', 'm'),
|
|
(4, 8, 'b', 'b'), (4, 5, 'x', 'x'), (7, 7, 'g', 'g'), (4, 5, 'p', 'p'),
|
|
(1, 1, 'q', 'q'), (9, 6, 'w', 'w'), (4, 2, 'd', 'd'), (8, 9, 'e', 'e');
|
|
CREATE TABLE t2 (
|
|
pk INTEGER AUTO_INCREMENT,
|
|
col_int_nokey INTEGER NOT NULL,
|
|
col_time_key TIME NOT NULL,
|
|
col_time_nokey TIME NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY (col_time_key)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t2 (col_int_nokey, col_time_key, col_time_nokey) VALUES
|
|
(7, '00:00:00', '00:00:00'), (0, '00:00:00', '00:00:00'),
|
|
(9, '06:35:17', '06:35:17'), (3, '18:07:14', '18:07:14'),
|
|
(4, '20:36:52', '20:36:52'), (2, '21:29:07', '21:29:07'),
|
|
(5, '23:45:57', '23:45:57'), (3, '22:54:57', '22:54:57'),
|
|
(1, '18:45:09', '18:45:09'), (3, '14:30:46', '14:30:46'),
|
|
(6, '19:23:43', '19:23:43'), (7, '03:39:30', '03:39:30'),
|
|
(5, '23:37:52', '23:37:52'), (1, '16:59:30', '16:59:30'),
|
|
(204, '22:21:15', '22:21:15'), (224, '12:24:37', '12:24:37'),
|
|
(9, '15:02:08', '15:02:08'), (5, '23:59:59', '23:59:59'),
|
|
(0, '08:23:30', '08:23:30'), (3, '08:32:22', '08:32:22');
|
|
explain SELECT ot1.col_int_key AS x
|
|
FROM t1 AS ot2
|
|
LEFT JOIN t1 AS ot1
|
|
ON ot2.col_varchar_nokey > ot1.col_varchar_key
|
|
WHERE (ot1.col_int_nokey, ot1.pk) IN
|
|
(SELECT it1.pk AS x,
|
|
it1.col_int_nokey AS y
|
|
FROM t2 AS it2
|
|
LEFT JOIN t2 AS it1
|
|
ON it2.col_time_nokey = it1.col_time_key
|
|
) AND ot1.pk IS NULL
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`ot1`.`col_int_key` AS `x` from `test`.`t2` `it1` join `test`.`t1` `ot2` join `test`.`t1` `ot1` semi join (`test`.`t2` `it2`) where ((`test`.`ot1`.`pk` is null) and (`test`.`ot2`.`col_varchar_nokey` > `test`.`ot1`.`col_varchar_key`) and multiple equal(`test`.`ot1`.`col_int_nokey`, `test`.`it1`.`pk`) and multiple equal(`test`.`ot1`.`pk`, `test`.`it1`.`col_int_nokey`) and multiple equal(`test`.`it2`.`col_time_nokey`, `test`.`it1`.`col_time_key`))
|
|
SELECT ot1.col_int_key AS x
|
|
FROM t1 AS ot2
|
|
LEFT JOIN t1 AS ot1
|
|
ON ot2.col_varchar_nokey > ot1.col_varchar_key
|
|
WHERE (ot1.col_int_nokey, ot1.pk) IN
|
|
(SELECT it1.pk AS x,
|
|
it1.col_int_nokey AS y
|
|
FROM t2 AS it2
|
|
LEFT JOIN t2 AS it1
|
|
ON it2.col_time_nokey = it1.col_time_key
|
|
) AND ot1.pk IS NULL
|
|
;
|
|
x
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13974177.
|
|
#
|
|
# Bug#13971022: Assert 'keyparts > 0' failed in create_ref_for_key...
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
CREATE TABLE t2 (
|
|
pk INT,
|
|
col_int_key INT,
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
PRIMARY KEY (pk)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
CREATE TABLE t3 (
|
|
i INT
|
|
);
|
|
SET @optimizer_switch_saved= @@optimizer_switch;
|
|
SET @@optimizer_switch="derived_merge=off";
|
|
explain SELECT table1.pk AS field1
|
|
FROM ( SELECT subquery1_t1. *
|
|
FROM t2 AS subquery1_t1
|
|
JOIN t2 AS subquery1_t2
|
|
ON subquery1_t2.pk = subquery1_t1.pk) AS table1
|
|
STRAIGHT_JOIN t2 AS table2
|
|
ON table1.col_int_key IN (SELECT 7 FROM t3)
|
|
WHERE table1.col_varchar_nokey IN
|
|
(SELECT subquery3_t1.col_varchar_key AS subquery3_field1
|
|
FROM t1 AS subquery3_t1
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t3 NULL ALL NULL NULL NULL NULL 0 0.00 Start temporary
|
|
1 PRIMARY <derived2> NULL ref <auto_key0> <auto_key0> 5 const 2 100.00 Using where
|
|
1 PRIMARY table2 NULL index NULL PRIMARY 4 NULL 1 100.00 Using index; Using join buffer (Block Nested Loop)
|
|
1 PRIMARY subquery3_t1 NULL ref col_varchar_key col_varchar_key 7 table1.col_varchar_nokey 0 0.00 Using index; End temporary
|
|
2 DERIVED subquery1_t1 NULL ALL PRIMARY NULL NULL NULL 1 100.00 NULL
|
|
2 DERIVED subquery1_t2 NULL eq_ref PRIMARY PRIMARY 4 test.subquery1_t1.pk 1 100.00 Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `table1`.`pk` AS `field1` from (/* select#2 */ select `test`.`subquery1_t1`.`pk` AS `pk`,`test`.`subquery1_t1`.`col_int_key` AS `col_int_key`,`test`.`subquery1_t1`.`col_varchar_key` AS `col_varchar_key`,`test`.`subquery1_t1`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t2` `subquery1_t1` join `test`.`t2` `subquery1_t2` where (`test`.`subquery1_t2`.`pk` = `test`.`subquery1_t1`.`pk`)) `table1` straight_join `test`.`t2` `table2` semi join (`test`.`t3`) semi join (`test`.`t1` `subquery3_t1`) where ((`table1`.`col_int_key` = 7) and (`test`.`subquery3_t1`.`col_varchar_key` = `table1`.`col_varchar_nokey`))
|
|
SELECT table1.pk AS field1
|
|
FROM ( SELECT subquery1_t1. *
|
|
FROM t2 AS subquery1_t1
|
|
JOIN t2 AS subquery1_t2
|
|
ON subquery1_t2.pk = subquery1_t1.pk) AS table1
|
|
STRAIGHT_JOIN t2 AS table2
|
|
ON table1.col_int_key IN (SELECT 7 FROM t3)
|
|
WHERE table1.col_varchar_nokey IN
|
|
(SELECT subquery3_t1.col_varchar_key AS subquery3_field1
|
|
FROM t1 AS subquery3_t1
|
|
)
|
|
;
|
|
field1
|
|
SET @@optimizer_switch= @optimizer_switch_saved;
|
|
DROP TABLE t1, t2, t3;
|
|
# End of test for bug#13971022.
|
|
#
|
|
# Bug#13623473 "MISSING ROWS ON SELECT AND JOIN WITH
|
|
# TIME/DATETIME COMPARE" - Subquery part of test.
|
|
#
|
|
SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-31 10:14:35');
|
|
CREATE TABLE t1 (
|
|
pk INT NOT NULL,
|
|
col_int_nokey INT,
|
|
col_int_key INT NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (10,1,7), (11,7,0), (12,4,9), (13,7,3),
|
|
(14,0,4), (15,2,2), (16,9,5), (17,4,3), (18,0,1), (19,9,3), (20,1,6),
|
|
(21,3,7), (22,8,5), (23,8,1), (24,18,204), (25,84,224), (26,6,9),
|
|
(27,3,5), (28,6,0), (29,6,3);
|
|
CREATE TABLE t2 (
|
|
col_int_nokey INT NOT NULL,
|
|
col_datetime_key DATETIME NOT NULL,
|
|
col_varchar_key VARCHAR(1) NOT NULL,
|
|
KEY col_datetime_key (col_datetime_key),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (1,'2001-11-04 19:07:55','k');
|
|
CREATE TABLE t3 (
|
|
col_time_key TIME,
|
|
KEY col_time_key (col_time_key)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t3 VALUES ('21:22:34'), ('10:50:38'), ('00:21:38'),
|
|
('04:08:02'), ('16:25:11'), ('10:14:58'), ('19:47:59'), ('11:14:24'),
|
|
('00:00:00'), ('00:00:00'), ('15:57:25'), ('07:05:51'), ('19:22:21'),
|
|
('03:53:16'), ('09:16:38'), ('15:37:26'), ('00:00:00'), ('05:03:03'),
|
|
('02:59:24'), ('00:01:58');
|
|
EXPLAIN SELECT outr.col_int_nokey
|
|
FROM t2 as outr
|
|
STRAIGHT_JOIN t3 AS outr2
|
|
ON outr2.col_time_key > outr.col_datetime_key
|
|
WHERE outr.col_int_nokey IN (
|
|
SELECT col_int_key
|
|
FROM t1 AS innr
|
|
WHERE innr.pk >= innr.col_int_nokey
|
|
) AND (
|
|
outr.col_int_nokey <= 6
|
|
OR
|
|
outr.col_varchar_key IS NULL
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE outr NULL ALL col_datetime_key NULL NULL NULL 1 100.00 Using where
|
|
1 SIMPLE innr NULL ref col_int_key col_int_key 4 test.outr.col_int_nokey 1 33.33 Using where; Start temporary; End temporary
|
|
1 SIMPLE outr2 NULL index col_time_key col_time_key 4 NULL 20 33.33 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Warning 1739 Cannot use range access on index 'col_time_key' due to type or collation conversion on field 'col_time_key'
|
|
Note 1003 /* select#1 */ select `test`.`outr`.`col_int_nokey` AS `col_int_nokey` from `test`.`t2` `outr` straight_join `test`.`t3` `outr2` semi join (`test`.`t1` `innr`) where ((`test`.`innr`.`col_int_key` = `test`.`outr`.`col_int_nokey`) and (`test`.`outr`.`col_int_nokey` <= 6) and (`test`.`innr`.`pk` >= `test`.`innr`.`col_int_nokey`) and (cast(`test`.`outr2`.`col_time_key` as datetime) > `test`.`outr`.`col_datetime_key`))
|
|
SELECT outr.col_int_nokey
|
|
FROM t2 as outr
|
|
STRAIGHT_JOIN t3 AS outr2
|
|
ON outr2.col_time_key > outr.col_datetime_key
|
|
WHERE outr.col_int_nokey IN (
|
|
SELECT col_int_key
|
|
FROM t1 AS innr
|
|
WHERE innr.pk >= innr.col_int_nokey
|
|
) AND (
|
|
outr.col_int_nokey <= 6
|
|
OR
|
|
outr.col_varchar_key IS NULL
|
|
);
|
|
col_int_nokey
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
DROP TABLE t1,t2,t3;
|
|
SET TIMESTAMP = DEFAULT;
|
|
# End of test for bug#13623473.
|
|
#
|
|
# Bug#13980954: Missing data on left join + null value + where..in
|
|
#
|
|
CREATE TABLE t1 (
|
|
ik INT,
|
|
vc varchar(1)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES (8, 'x'), (NULL, 'x');
|
|
CREATE TABLE t2 (
|
|
ik INT,
|
|
vc varchar(1)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES
|
|
(0, 'x'), (7, 'i'), (7, 'e'), (1, 'p'), (7, 's'), (1, 'j');
|
|
explain format=json SELECT t2.vc, t2.ik AS t2_ik, t1.ik AS t1_ik
|
|
FROM t2 LEFT JOIN t1 ON t2.vc=t1.vc
|
|
WHERE t2.vc IN (SELECT vc FROM t2 AS t3);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "7.62"
|
|
},
|
|
"nested_loop": [
|
|
{
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "t3",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 6,
|
|
"rows_produced_per_join": 6,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "0.60",
|
|
"prefix_cost": "1.11",
|
|
"data_read_per_join": "96"
|
|
},
|
|
"used_columns": [
|
|
"vc"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t2",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 6,
|
|
"rows_produced_per_join": 1,
|
|
"filtered": "16.67",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "0.10",
|
|
"prefix_cost": "6.91",
|
|
"data_read_per_join": "16"
|
|
},
|
|
"used_columns": [
|
|
"ik",
|
|
"vc"
|
|
],
|
|
"attached_condition": "(`test`.`t2`.`vc` = `test`.`t3`.`vc`)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 2,
|
|
"rows_produced_per_join": 2,
|
|
"filtered": "100.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.50",
|
|
"eval_cost": "0.20",
|
|
"prefix_cost": "7.62",
|
|
"data_read_per_join": "32"
|
|
},
|
|
"used_columns": [
|
|
"ik",
|
|
"vc"
|
|
],
|
|
"attached_condition": "<if>(is_not_null_compl(t1), (`test`.`t1`.`vc` = `test`.`t3`.`vc`), true)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`vc` AS `vc`,`test`.`t2`.`ik` AS `t2_ik`,`test`.`t1`.`ik` AS `t1_ik` from `test`.`t2` left join `test`.`t1` on((`test`.`t1`.`vc` = `test`.`t3`.`vc`)) semi join (`test`.`t2` `t3`) where (`test`.`t2`.`vc` = `test`.`t3`.`vc`)
|
|
SELECT t2.vc, t2.ik AS t2_ik, t1.ik AS t1_ik
|
|
FROM t2 LEFT JOIN t1 ON t2.vc=t1.vc
|
|
WHERE t2.vc IN (SELECT vc FROM t2 AS t3);
|
|
vc t2_ik t1_ik
|
|
x 0 8
|
|
x 0 NULL
|
|
i 7 NULL
|
|
e 7 NULL
|
|
p 1 NULL
|
|
s 7 NULL
|
|
j 1 NULL
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#13980954.
|
|
#
|
|
# Bug#14048292: Segfault in Item_field::result_type on 2nd execution
|
|
# of prep stmt with join of view
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int INT
|
|
);
|
|
INSERT INTO t1 VALUES (0), (1);
|
|
CREATE VIEW view_t1 AS SELECT * FROM t1;
|
|
explain SELECT alias1.col_int
|
|
FROM t1 AS alias1
|
|
LEFT JOIN view_t1 AS alias2
|
|
ON alias1.col_int IN
|
|
(SELECT sq1_alias1.col_int
|
|
FROM t1 AS sq1_alias1
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE alias1 NULL ALL NULL NULL NULL NULL 2 100.00 Start temporary
|
|
1 SIMPLE sq1_alias1 NULL ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`alias1`.`col_int` AS `col_int` from `test`.`t1` `alias1` left join (`test`.`t1` semi join (`test`.`t1` `sq1_alias1`)) on(((`test`.`sq1_alias1`.`col_int` = `test`.`alias1`.`col_int`))) where true
|
|
PREPARE stmt FROM "SELECT alias1.col_int
|
|
FROM t1 AS alias1
|
|
LEFT JOIN view_t1 AS alias2
|
|
ON alias1.col_int IN
|
|
(SELECT sq1_alias1.col_int
|
|
FROM t1 AS sq1_alias1
|
|
)";
|
|
EXECUTE stmt;
|
|
col_int
|
|
0
|
|
1
|
|
0
|
|
1
|
|
EXECUTE stmt;
|
|
col_int
|
|
0
|
|
1
|
|
0
|
|
1
|
|
DEALLOCATE PREPARE stmt;
|
|
DROP VIEW view_t1;
|
|
DROP TABLE t1;
|
|
# End of test for bug#14048292.
|
|
#
|
|
# Bug#14064201: Missing data on join of derived table + WHERE .. IN
|
|
# with two operands
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_varchar_nokey VARCHAR(1)
|
|
) charset utf8mb4;
|
|
INSERT INTO t1 VALUES
|
|
('v'), ('s'), ('l'), ('y'), ('c'), ('i'), ('h'), ('q'), ('a'), ('v'),
|
|
('u'), ('s'), ('y'), ('z'), ('h'), ('p'), ('e'), ('i'), ('y'), ('w');
|
|
CREATE TABLE t2 (
|
|
col_varchar_key VARCHAR(1),
|
|
col_varchar_nokey VARCHAR(1),
|
|
KEY col_varchar_key(col_varchar_key)
|
|
) charset utf8mb4;
|
|
INSERT INTO t2 VALUES
|
|
('j','j'), ('v','v'), ('c','c'), ('m','m'), ('d','d'), ('d','d'), ('y','y');
|
|
SET @optimizer_switch_saved= @@optimizer_switch;
|
|
SET @@optimizer_switch="derived_merge=off";
|
|
explain format=json SELECT *
|
|
FROM (SELECT * FROM t2) AS derived1
|
|
LEFT JOIN t1
|
|
USING (col_varchar_nokey)
|
|
WHERE (col_varchar_nokey, col_varchar_nokey) IN
|
|
(SELECT col_varchar_nokey, col_varchar_key
|
|
FROM t2 AS derived2
|
|
);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "23.73"
|
|
},
|
|
"nested_loop": [
|
|
{
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "derived2",
|
|
"access_type": "ALL",
|
|
"possible_keys": [
|
|
"col_varchar_key"
|
|
],
|
|
"rows_examined_per_scan": 7,
|
|
"rows_produced_per_join": 7,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "0.70",
|
|
"prefix_cost": "1.21",
|
|
"data_read_per_join": "112"
|
|
},
|
|
"used_columns": [
|
|
"col_varchar_key",
|
|
"col_varchar_nokey"
|
|
],
|
|
"attached_condition": "((`test`.`derived2`.`col_varchar_key` = `test`.`derived2`.`col_varchar_nokey`) and (`test`.`derived2`.`col_varchar_nokey` is not null))"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "derived1",
|
|
"access_type": "ref",
|
|
"possible_keys": [
|
|
"<auto_key0>"
|
|
],
|
|
"key": "<auto_key0>",
|
|
"used_key_parts": [
|
|
"col_varchar_nokey"
|
|
],
|
|
"key_length": "7",
|
|
"ref": [
|
|
"test.derived2.col_varchar_nokey"
|
|
],
|
|
"rows_examined_per_scan": 2,
|
|
"rows_produced_per_join": 7,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "3.50",
|
|
"eval_cost": "0.70",
|
|
"prefix_cost": "9.21",
|
|
"data_read_per_join": "112"
|
|
},
|
|
"used_columns": [
|
|
"col_varchar_key",
|
|
"col_varchar_nokey"
|
|
],
|
|
"materialized_from_subquery": {
|
|
"using_temporary_table": true,
|
|
"dependent": false,
|
|
"cacheable": true,
|
|
"query_block": {
|
|
"select_id": 2,
|
|
"cost_info": {
|
|
"query_cost": "1.21"
|
|
},
|
|
"table": {
|
|
"table_name": "t2",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 7,
|
|
"rows_produced_per_join": 7,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "0.70",
|
|
"prefix_cost": "1.21",
|
|
"data_read_per_join": "112"
|
|
},
|
|
"used_columns": [
|
|
"col_varchar_key",
|
|
"col_varchar_nokey"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 140,
|
|
"filtered": "100.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.52",
|
|
"eval_cost": "14.00",
|
|
"prefix_cost": "23.73",
|
|
"data_read_per_join": "1K"
|
|
},
|
|
"used_columns": [
|
|
"col_varchar_nokey"
|
|
],
|
|
"attached_condition": "<if>(is_not_null_compl(t1), (`test`.`t1`.`col_varchar_nokey` = `test`.`derived2`.`col_varchar_nokey`), true)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `derived1`.`col_varchar_nokey` AS `col_varchar_nokey`,`derived1`.`col_varchar_key` AS `col_varchar_key` from (/* select#2 */ select `test`.`t2`.`col_varchar_key` AS `col_varchar_key`,`test`.`t2`.`col_varchar_nokey` AS `col_varchar_nokey` from `test`.`t2`) `derived1` left join `test`.`t1` on((`test`.`t1`.`col_varchar_nokey` = `test`.`derived2`.`col_varchar_nokey`)) semi join (`test`.`t2` `derived2`) where ((`test`.`derived2`.`col_varchar_key` = `test`.`derived2`.`col_varchar_nokey`) and (`derived1`.`col_varchar_nokey` = `test`.`derived2`.`col_varchar_nokey`))
|
|
SELECT *
|
|
FROM (SELECT * FROM t2) AS derived1
|
|
LEFT JOIN t1
|
|
USING (col_varchar_nokey)
|
|
WHERE (col_varchar_nokey, col_varchar_nokey) IN
|
|
(SELECT col_varchar_nokey, col_varchar_key
|
|
FROM t2 AS derived2
|
|
);
|
|
col_varchar_nokey col_varchar_key
|
|
c c
|
|
d d
|
|
d d
|
|
j j
|
|
m m
|
|
v v
|
|
v v
|
|
y y
|
|
y y
|
|
y y
|
|
SET @@optimizer_switch= @optimizer_switch_saved;
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
col_int_nokey int NOT NULL,
|
|
col_int_key int NOT NULL,
|
|
KEY col_int_key (col_int_key)
|
|
);
|
|
INSERT INTO t1 VALUES
|
|
(1,7), (7,0), (4,9), (7,3), (0,4), (2,2), (9,5), (4,3), (0,1), (9,3),
|
|
(1,6), (3,7), (8,5), (8,1), (18,204), (84,224), (6,9), (3,5), (6,0), (6,3);
|
|
CREATE TABLE t2 (
|
|
col_int_nokey int NOT NULL,
|
|
col_int_key int NOT NULL,
|
|
KEY col_int_key (col_int_key)
|
|
);
|
|
INSERT INTO t2 VALUES
|
|
(4,0), (6,8), (3,1), (5,8), (3,9), (246,24), (2,6), (9,1), (3,6), (8,2),
|
|
(1,4), (8,8), (8,4), (5,4), (7,7), (5,4), (1,1), (6,9), (2,4), (9,8);
|
|
explain format=json SELECT grandparent1.*
|
|
FROM t1 AS grandparent1
|
|
LEFT JOIN t1 USING (col_int_nokey)
|
|
WHERE (col_int_nokey, col_int_nokey) IN
|
|
(SELECT col_int_nokey, col_int_key
|
|
FROM t2
|
|
);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "52.73"
|
|
},
|
|
"nested_loop": [
|
|
{
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "t2",
|
|
"access_type": "ALL",
|
|
"possible_keys": [
|
|
"col_int_key"
|
|
],
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 20,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "2.00",
|
|
"prefix_cost": "2.51",
|
|
"data_read_per_join": "320"
|
|
},
|
|
"used_columns": [
|
|
"col_int_nokey",
|
|
"col_int_key"
|
|
],
|
|
"attached_condition": "(`test`.`t2`.`col_int_key` = `test`.`t2`.`col_int_nokey`)"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "grandparent1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 2,
|
|
"filtered": "10.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "0.20",
|
|
"prefix_cost": "48.22",
|
|
"data_read_per_join": "32"
|
|
},
|
|
"used_columns": [
|
|
"col_int_nokey",
|
|
"col_int_key"
|
|
],
|
|
"attached_condition": "(`test`.`grandparent1`.`col_int_nokey` = `test`.`t2`.`col_int_nokey`)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "t1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 40,
|
|
"filtered": "100.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.51",
|
|
"eval_cost": "4.00",
|
|
"prefix_cost": "52.73",
|
|
"data_read_per_join": "640"
|
|
},
|
|
"used_columns": [
|
|
"col_int_nokey"
|
|
],
|
|
"attached_condition": "<if>(is_not_null_compl(t1), (`test`.`t1`.`col_int_nokey` = `test`.`t2`.`col_int_nokey`), true)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`grandparent1`.`col_int_nokey` AS `col_int_nokey`,`test`.`grandparent1`.`col_int_key` AS `col_int_key` from `test`.`t1` `grandparent1` left join `test`.`t1` on((`test`.`t1`.`col_int_nokey` = `test`.`t2`.`col_int_nokey`)) semi join (`test`.`t2`) where ((`test`.`t2`.`col_int_key` = `test`.`t2`.`col_int_nokey`) and (`test`.`grandparent1`.`col_int_nokey` = `test`.`t2`.`col_int_nokey`))
|
|
SELECT grandparent1.*
|
|
FROM t1 AS grandparent1
|
|
LEFT JOIN t1 USING (col_int_nokey)
|
|
WHERE (col_int_nokey, col_int_nokey) IN
|
|
(SELECT col_int_nokey, col_int_key
|
|
FROM t2
|
|
);
|
|
col_int_nokey col_int_key
|
|
1 6
|
|
1 6
|
|
1 7
|
|
1 7
|
|
7 0
|
|
7 0
|
|
7 3
|
|
7 3
|
|
8 1
|
|
8 1
|
|
8 5
|
|
8 5
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
pk int,
|
|
col_int_key int,
|
|
col_datetime_key datetime,
|
|
col_varchar_key varchar(1),
|
|
col_varchar_nokey varchar(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_datetime_key (col_datetime_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4 engine=MyISAM;
|
|
INSERT INTO t1 VALUES
|
|
(10,7,'2004-06-06 04:22:12','v','v'), (11,0,'2005-11-13 01:12:31','s','s'),
|
|
(12,9,'2002-05-04 01:50:00','l','l'), (13,3,'2004-10-27 10:28:45','y','y'),
|
|
(14,4,'2006-07-22 05:24:23','c','c'), (15,2,'2002-05-16 21:34:03','i','i'),
|
|
(16,5,'2008-04-17 10:45:30','h','h'), (17,3,'2009-04-21 02:58:02','q','q'),
|
|
(18,1,'2008-01-11 11:01:51','a','a'), (19,3,'1900-01-01 00:00:00','v','v'),
|
|
(20,6,'2007-05-17 18:24:57','u','u'), (21,7,'2007-08-07 00:00:00','s','s'),
|
|
(22,5,'2001-08-28 00:00:00','y','y'), (23,1,'2004-04-16 00:27:28','z','z'),
|
|
(24,204,'2005-05-03 07:06:22','h','h'), (25,224,'2009-03-11 17:09:50','p','p'),
|
|
(26,9,'2007-12-08 01:54:28','e','e'), (27,5,'2009-07-28 18:19:54','i','i'),
|
|
(28,0,'2008-06-08 00:00:00','y','y'), (29,3,'2005-02-09 09:20:26','w','w');
|
|
CREATE TABLE t2 (
|
|
pk int,
|
|
col_int_key int,
|
|
col_datetime_key datetime,
|
|
col_varchar_key varchar(1),
|
|
col_varchar_nokey varchar(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_datetime_key (col_datetime_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4 engine=MyISAM;
|
|
INSERT INTO t2 VALUES
|
|
(1,0,'2002-02-13 17:30:06','j','j'), (2,8,'2008-09-27 00:34:58','v','v'),
|
|
(3,1,'2007-05-28 00:00:00','c','c'), (4,8,'2009-07-25 09:21:20','m','m'),
|
|
(5,9,'2002-01-16 00:00:00','d','d'), (6,24,'2006-10-12 04:32:53','d','d'),
|
|
(7,6,'2001-02-15 03:08:38','y','y'), (8,1,'2004-10-02 20:31:15','t','t'),
|
|
(9,6,'2002-08-20 22:48:00','d','d'), (10,2,'1900-01-01 00:00:00','s','s'),
|
|
(11,4,'2005-08-15 00:00:00','r','r'), (12,8,'1900-01-01 00:00:00','m','m'),
|
|
(13,4,'2008-05-16 08:09:06','b','b'), (14,4,'2001-01-20 12:47:23','x','x'),
|
|
(15,7,'2008-07-02 00:00:00','g','g'), (16,4,'1900-01-01 00:00:00','p','p'),
|
|
(17,1,'2002-12-08 11:34:58','q','q'), (18,9,'1900-01-01 00:00:00','w','w'),
|
|
(19,4,'1900-01-01 00:00:00','d','d'), (20,8,'2002-08-25 20:35:06','e','e');
|
|
SELECT alias1.col_datetime_key
|
|
FROM t2 AS alias1
|
|
RIGHT JOIN t2 AS alias2
|
|
JOIN t2 AS alias3
|
|
ON alias3.pk = alias2.pk
|
|
ON alias3.col_varchar_nokey = alias2.col_varchar_key OR
|
|
alias2.col_varchar_nokey
|
|
WHERE (alias2.col_varchar_key, alias2.col_varchar_key) IN
|
|
(SELECT sq2_alias2.col_varchar_key, sq2_alias1.col_varchar_nokey
|
|
FROM t1 AS sq2_alias1, t1 AS sq2_alias2
|
|
WHERE sq2_alias2.col_int_key < 2);
|
|
col_datetime_key
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
2001-01-20 12:47:23
|
|
2001-01-20 12:47:23
|
|
2001-02-15 03:08:38
|
|
2001-02-15 03:08:38
|
|
2002-01-16 00:00:00
|
|
2002-01-16 00:00:00
|
|
2002-02-13 17:30:06
|
|
2002-02-13 17:30:06
|
|
2002-08-20 22:48:00
|
|
2002-08-20 22:48:00
|
|
2002-08-25 20:35:06
|
|
2002-08-25 20:35:06
|
|
2002-12-08 11:34:58
|
|
2002-12-08 11:34:58
|
|
2004-10-02 20:31:15
|
|
2004-10-02 20:31:15
|
|
2005-08-15 00:00:00
|
|
2005-08-15 00:00:00
|
|
2006-10-12 04:32:53
|
|
2006-10-12 04:32:53
|
|
2007-05-28 00:00:00
|
|
2007-05-28 00:00:00
|
|
2008-05-16 08:09:06
|
|
2008-05-16 08:09:06
|
|
2008-07-02 00:00:00
|
|
2008-07-02 00:00:00
|
|
2008-09-27 00:34:58
|
|
2008-09-27 00:34:58
|
|
2009-07-25 09:21:20
|
|
2009-07-25 09:21:20
|
|
ALTER TABLE t1 DISABLE KEYS;
|
|
ALTER TABLE t2 DISABLE KEYS;
|
|
explain format=json SELECT alias1.col_datetime_key
|
|
FROM t2 AS alias1
|
|
RIGHT JOIN t2 AS alias2
|
|
JOIN t2 AS alias3
|
|
ON alias3.pk = alias2.pk
|
|
ON alias3.col_varchar_nokey = alias2.col_varchar_key OR
|
|
alias2.col_varchar_nokey
|
|
WHERE (alias2.col_varchar_key, alias2.col_varchar_key) IN
|
|
(SELECT sq2_alias2.col_varchar_key, sq2_alias1.col_varchar_nokey
|
|
FROM t1 AS sq2_alias1, t1 AS sq2_alias2
|
|
WHERE sq2_alias2.col_int_key < 2);
|
|
EXPLAIN
|
|
{
|
|
"query_block": {
|
|
"select_id": 1,
|
|
"cost_info": {
|
|
"query_cost": "52.68"
|
|
},
|
|
"nested_loop": [
|
|
{
|
|
"duplicates_removal": {
|
|
"using_temporary_table": true,
|
|
"nested_loop": [
|
|
{
|
|
"table": {
|
|
"table_name": "sq2_alias2",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 6,
|
|
"filtered": "33.33",
|
|
"cost_info": {
|
|
"read_cost": "1.86",
|
|
"eval_cost": "0.67",
|
|
"prefix_cost": "2.53",
|
|
"data_read_per_join": "213"
|
|
},
|
|
"used_columns": [
|
|
"col_int_key",
|
|
"col_varchar_key"
|
|
],
|
|
"attached_condition": "(`test`.`sq2_alias2`.`col_int_key` < 2)"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "alias2",
|
|
"access_type": "ALL",
|
|
"possible_keys": [
|
|
"PRIMARY"
|
|
],
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 13,
|
|
"filtered": "10.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.53",
|
|
"eval_cost": "1.33",
|
|
"prefix_cost": "16.39",
|
|
"data_read_per_join": "426"
|
|
},
|
|
"used_columns": [
|
|
"pk",
|
|
"col_varchar_key",
|
|
"col_varchar_nokey"
|
|
],
|
|
"attached_condition": "(`test`.`alias2`.`col_varchar_key` = `test`.`sq2_alias2`.`col_varchar_key`)"
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "sq2_alias1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 2,
|
|
"filtered": "10.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.53",
|
|
"eval_cost": "0.20",
|
|
"prefix_cost": "47.45",
|
|
"data_read_per_join": "64"
|
|
},
|
|
"used_columns": [
|
|
"col_varchar_nokey"
|
|
],
|
|
"attached_condition": "(`test`.`sq2_alias1`.`col_varchar_nokey` = `test`.`sq2_alias2`.`col_varchar_key`)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "alias3",
|
|
"access_type": "eq_ref",
|
|
"possible_keys": [
|
|
"PRIMARY"
|
|
],
|
|
"key": "PRIMARY",
|
|
"used_key_parts": [
|
|
"pk"
|
|
],
|
|
"key_length": "4",
|
|
"ref": [
|
|
"test.alias2.pk"
|
|
],
|
|
"rows_examined_per_scan": 1,
|
|
"rows_produced_per_join": 2,
|
|
"filtered": "100.00",
|
|
"cost_info": {
|
|
"read_cost": "0.50",
|
|
"eval_cost": "0.20",
|
|
"prefix_cost": "48.15",
|
|
"data_read_per_join": "64"
|
|
},
|
|
"used_columns": [
|
|
"pk",
|
|
"col_varchar_nokey"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"table": {
|
|
"table_name": "alias1",
|
|
"access_type": "ALL",
|
|
"rows_examined_per_scan": 20,
|
|
"rows_produced_per_join": 40,
|
|
"filtered": "100.00",
|
|
"using_join_buffer": "Block Nested Loop",
|
|
"cost_info": {
|
|
"read_cost": "0.53",
|
|
"eval_cost": "4.00",
|
|
"prefix_cost": "52.68",
|
|
"data_read_per_join": "1K"
|
|
},
|
|
"used_columns": [
|
|
"col_datetime_key"
|
|
],
|
|
"attached_condition": "<if>(is_not_null_compl(alias1), (((`test`.`alias2`.`col_varchar_key` = `test`.`sq2_alias2`.`col_varchar_key`) and (`test`.`sq2_alias1`.`col_varchar_nokey` = `test`.`sq2_alias2`.`col_varchar_key`) and (`test`.`alias3`.`col_varchar_nokey` = `test`.`sq2_alias2`.`col_varchar_key`)) or (0 <> `test`.`alias2`.`col_varchar_nokey`)), true)"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`alias1`.`col_datetime_key` AS `col_datetime_key` from `test`.`t2` `alias2` join `test`.`t2` `alias3` left join `test`.`t2` `alias1` on((((`test`.`alias2`.`col_varchar_key` = `test`.`sq2_alias2`.`col_varchar_key`) and (`test`.`sq2_alias1`.`col_varchar_nokey` = `test`.`sq2_alias2`.`col_varchar_key`) and (`test`.`alias3`.`col_varchar_nokey` = `test`.`sq2_alias2`.`col_varchar_key`)) or (0 <> `test`.`alias2`.`col_varchar_nokey`))) semi join (`test`.`t1` `sq2_alias1` join `test`.`t1` `sq2_alias2`) where ((`test`.`alias3`.`pk` = `test`.`alias2`.`pk`) and (`test`.`alias2`.`col_varchar_key` = `test`.`sq2_alias2`.`col_varchar_key`) and (`test`.`sq2_alias1`.`col_varchar_nokey` = `test`.`sq2_alias2`.`col_varchar_key`) and (`test`.`sq2_alias2`.`col_int_key` < 2))
|
|
SELECT alias1.col_datetime_key
|
|
FROM t2 AS alias1
|
|
RIGHT JOIN t2 AS alias2
|
|
JOIN t2 AS alias3
|
|
ON alias3.pk = alias2.pk
|
|
ON alias3.col_varchar_nokey = alias2.col_varchar_key OR
|
|
alias2.col_varchar_nokey
|
|
WHERE (alias2.col_varchar_key, alias2.col_varchar_key) IN
|
|
(SELECT sq2_alias2.col_varchar_key, sq2_alias1.col_varchar_nokey
|
|
FROM t1 AS sq2_alias1, t1 AS sq2_alias2
|
|
WHERE sq2_alias2.col_int_key < 2);
|
|
col_datetime_key
|
|
2002-02-13 17:30:06
|
|
2002-02-13 17:30:06
|
|
2008-09-27 00:34:58
|
|
2008-09-27 00:34:58
|
|
2007-05-28 00:00:00
|
|
2007-05-28 00:00:00
|
|
2009-07-25 09:21:20
|
|
2009-07-25 09:21:20
|
|
2002-01-16 00:00:00
|
|
2002-01-16 00:00:00
|
|
2006-10-12 04:32:53
|
|
2006-10-12 04:32:53
|
|
2001-02-15 03:08:38
|
|
2001-02-15 03:08:38
|
|
2004-10-02 20:31:15
|
|
2004-10-02 20:31:15
|
|
2002-08-20 22:48:00
|
|
2002-08-20 22:48:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
2005-08-15 00:00:00
|
|
2005-08-15 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
2008-05-16 08:09:06
|
|
2008-05-16 08:09:06
|
|
2001-01-20 12:47:23
|
|
2001-01-20 12:47:23
|
|
2008-07-02 00:00:00
|
|
2008-07-02 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
2002-12-08 11:34:58
|
|
2002-12-08 11:34:58
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
1900-01-01 00:00:00
|
|
2002-08-25 20:35:06
|
|
2002-08-25 20:35:06
|
|
DROP TABLE t1, t2;
|
|
# End of test for bug#14064201.
|
|
#
|
|
# Bug#18223655:ASSERTION FAILED: (INT)IDX >= 0
|
|
# && IDX < PARENT_JOIN->TABLES
|
|
#
|
|
CREATE TABLE b (d INT);
|
|
CREATE TABLE c (a INT, b INT,c INT,d BLOB NOT NULL);
|
|
SELECT(SELECT 1
|
|
FROM b WHERE(SELECT 1 IN (SELECT 1 FROM b WHERE 1 NOT BETWEEN d AND 1)
|
|
FROM b) IN (SELECT d FROM c)) as cc FROM b;
|
|
cc
|
|
INSERT INTO b VALUE(1);
|
|
INSERT INTO c VALUES(1,2,3,'1'),(2,3,4,'1'),(3,4,5,'C');
|
|
SELECT(SELECT d FROM b WHERE(SELECT d IN
|
|
(SELECT d FROM b WHERE 1 NOT BETWEEN d AND 1) FROM b) IN
|
|
(SELECT d FROM c)) as cc FROM c;
|
|
cc
|
|
1
|
|
1
|
|
1
|
|
DROP TABLE b,c;
|
|
#
|
|
# Bug#18447874:WRONG RESULT COMING FROM SEMI-JOIN
|
|
#
|
|
CREATE TABLE b (
|
|
d INT(11)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
CREATE TABLE c (
|
|
d BLOB
|
|
) ;
|
|
CREATE TABLE d (
|
|
b INT(11)
|
|
);
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO b VALUES(1),(2),(4);
|
|
INSERT INTO c VALUES(1),(2),(3);
|
|
SELECT 1 FROM b WHERE (SELECT 1 FROM d ) IN (SELECT d FROM c) ;
|
|
1
|
|
INSERT INTO d VALUES(2);
|
|
SELECT 1 FROM b WHERE (SELECT 1 FROM d ) IN (SELECT d FROM c) ;
|
|
1
|
|
1
|
|
1
|
|
1
|
|
DROP TABLE b,c,d;
|
|
#
|
|
# Bug#17292723:INCORRECT RESULT FOR (SELECT...) IN (SELECT...) STATEMENT
|
|
#
|
|
CREATE TABLE t1 (
|
|
ID int(11) NOT NULL AUTO_INCREMENT,
|
|
id2 int(11) DEFAULT NULL,
|
|
id3 int(11) DEFAULT NULL,
|
|
id4 varchar(150) COLLATE utf8_spanish_ci NOT NULL,
|
|
id5 int(11) DEFAULT NULL,
|
|
PRIMARY KEY (ID),
|
|
KEY id2 (id2),
|
|
KEY id3 (id3),
|
|
KEY id5 (id5)
|
|
) ENGINE=InnoDB;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 3778 'utf8_spanish_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES
|
|
(123,1,1,'1',NULL),
|
|
(124,1,1,'2',NULL),
|
|
(125,1,1,'4',NULL),
|
|
(126,1,1,'3',NULL),
|
|
(127,1,1,'6',NULL),
|
|
(128,1,1,'8',NULL);
|
|
CREATE TABLE t2 (
|
|
id6 int(11) NOT NULL,
|
|
id7 int(11) NOT NULL,
|
|
PRIMARY KEY (id6,id7),
|
|
KEY id7 (id7)
|
|
) ENGINE=InnoDB;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t2 VALUES (126,123),(130,123),(135,123);
|
|
SELECT ID
|
|
FROM t1 p0
|
|
WHERE p0.id3=1
|
|
AND ( (SELECT p1.id FROM t1 p1 WHERE p1.id=123) IN (SELECT p3.id FROM t2
|
|
p2, t1 p3 WHERE p0.id=p2.id6 AND p2.id7=p3.id));
|
|
ID
|
|
126
|
|
DROP TABLE t1,t2;
|
|
set @@optimizer_switch=@old_opt_switch;
|
|
# End of 5.6 tests
|
|
#
|
|
# Bug#19336348 DEBUG CRASH AT SETUP_SEMIJOIN_DUPS_ELIMINATION IN SQL/SQL_SELECT.CC
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_varchar_nokey varchar(1)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES ('c'),(NULL),('x');
|
|
CREATE TABLE t2 (
|
|
pk int,
|
|
col_varchar_key varchar(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (10,'l'),(11,'p');
|
|
ANALYZE TABLE t1,t2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
EXPLAIN SELECT 1
|
|
FROM t1 AS outr
|
|
WHERE outr.col_varchar_nokey IN
|
|
(
|
|
SELECT innr.col_varchar_key
|
|
FROM t2 AS innr
|
|
WHERE innr.pk <= 7
|
|
)
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE innr NULL index PRIMARY,col_varchar_key col_varchar_key 7 NULL 2 100.00 Using where; Using index; LooseScan
|
|
1 SIMPLE outr NULL ALL NULL NULL NULL NULL 3 33.33 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` `outr` semi join (`test`.`t2` `innr`) where ((`test`.`outr`.`col_varchar_nokey` = `test`.`innr`.`col_varchar_key`) and (`test`.`innr`.`pk` <= 7))
|
|
SELECT 1
|
|
FROM t1 AS outr
|
|
WHERE outr.col_varchar_nokey IN
|
|
(
|
|
SELECT innr.col_varchar_key
|
|
FROM t2 AS innr
|
|
WHERE innr.pk <= 7
|
|
)
|
|
;
|
|
1
|
|
DROP TABLE t1,t2;
|
|
#
|
|
# Bug#18174394 BLOBS: CRASH AFTER UNINITIALIZED VALUES IN ITEM_FIELD::STR_RESULT
|
|
#
|
|
CREATE TABLE t1(d BLOB, b BLOB);
|
|
INSERT INTO t1(d,b) VALUES ('aaaa',''),('bnbb','');
|
|
SELECT 1 FROM t1
|
|
WHERE (SELECT b FROM t1) IN (SELECT (d>=1) FROM t1);
|
|
ERROR 21000: Subquery returns more than 1 row
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#19779600: ASSERT FAILED IN REPLACE_SUBCONDITION WITH IN
|
|
# PREDICATE INSIDE IN PREDICATE
|
|
#
|
|
CREATE TABLE t(X INT) ENGINE=InnoDB;
|
|
INSERT INTO t VALUES (1);
|
|
ANALYZE TABLE t;
|
|
Table Op Msg_type Msg_text
|
|
test.t analyze status OK
|
|
EXPLAIN SELECT 1 FROM t WHERE (1 IN (SELECT 1 FROM t)) IN (SELECT 1 FROM t);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 PRIMARY t NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
2 SUBQUERY t NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t` semi join (`test`.`t`) where true
|
|
SELECT 1 FROM t WHERE (1 IN (SELECT 1 FROM t)) IN (SELECT 1 FROM t);
|
|
1
|
|
1
|
|
DROP TABLE t;
|
|
#
|
|
# Bug#19465034 ASSERT ON SETUP_SEMIJOIN_DUPS_ELIMINATION IN SQL/SQL_SELECT.CC
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER NOT NULL,
|
|
i1 INTEGER NOT NULL,
|
|
PRIMARY KEY (pk)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1,1);
|
|
CREATE TABLE t2 (
|
|
pk INTEGER NOT NULL,
|
|
c1 VARCHAR(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY c1_key (c1)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (1,'j'),(2,'v'),(3,'c');
|
|
CREATE TABLE t3 (
|
|
pk INTEGER NOT NULL,
|
|
c1 VARCHAR(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY c1_key (c1)
|
|
) charset utf8mb4 ENGINE=InnoDB;
|
|
INSERT INTO t3 VALUES (10,'v'),(11,'s');
|
|
ANALYZE TABLE t1, t2, t3;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
test.t3 analyze status OK
|
|
EXPLAIN SELECT *
|
|
FROM t1 JOIN t2 ON t1.i1 >= t2.pk
|
|
WHERE t2.c1 IN (
|
|
SELECT t3.c1
|
|
FROM t3
|
|
WHERE t3.pk < 3
|
|
);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
1 SIMPLE t3 NULL index PRIMARY,c1_key c1_key 6 NULL 2 100.00 Using where; Using index; LooseScan
|
|
1 SIMPLE t2 NULL ref PRIMARY,c1_key c1_key 6 test.t3.c1 1 33.33 Using where; Using index
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk`,`test`.`t1`.`i1` AS `i1`,`test`.`t2`.`pk` AS `pk`,`test`.`t2`.`c1` AS `c1` from `test`.`t1` join `test`.`t2` semi join (`test`.`t3`) where ((`test`.`t2`.`c1` = `test`.`t3`.`c1`) and (`test`.`t3`.`pk` < 3) and (`test`.`t1`.`i1` >= `test`.`t2`.`pk`))
|
|
SELECT *
|
|
FROM t1 JOIN t2 ON t1.i1 >= t2.pk
|
|
WHERE t2.c1 IN (
|
|
SELECT t3.c1
|
|
FROM t3
|
|
WHERE t3.pk < 3
|
|
);
|
|
pk i1 pk c1
|
|
DROP TABLE t1,t2,t3;
|
|
#
|
|
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
|
|
#
|
|
CREATE TABLE t1(x INT) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1);
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where true
|
|
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
|
|
1
|
|
1
|
|
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where true
|
|
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
|
|
1
|
|
1
|
|
EXPLAIN SELECT 1 FROM t1 WHERE
|
|
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
|
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where false
|
|
SELECT 1 FROM t1 WHERE
|
|
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
|
|
1
|
|
DROP TABLE t1;
|
|
#
|
|
#Bug#20119743 ASSERTIONQEP_TAB->USE_ORDER() IN ENUM_NESTED_LOOP_STATE
|
|
# EVALUATE_JOIN_RECORD
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int(11) NOT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t1 VALUES (1,'x');
|
|
CREATE TABLE t2 (
|
|
col_date_key date DEFAULT NULL,
|
|
col_int_key int(11) DEFAULT NULL,
|
|
col_varchar_key varchar(1) DEFAULT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_date_key (col_date_key),
|
|
KEY col_varchar_key (col_varchar_key,col_int_key)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t2 VALUES ('2000-12-03', 8, 'x', 'x'),('2008-05-03', 7, 'd', 'd'),
|
|
('2005-12-06', 1, 'r', 'r'),('2000-04-10', 7, 'f', 'f'),
|
|
('2002-11-05', 9, 'y', 'y'),('2000-09-06', NULL, 'u', 'u'),
|
|
(NULL, 1, 'm', 'm'),('2007-06-14', 9, NULL, NULL),
|
|
('2007-11-17', 2, 'o', 'o'),('2009-02-23', 9, 'w', 'w'),
|
|
('2007-01-08', 2, 'm', 'm'), ('2008-06-10', 4, 'q', 'q'),
|
|
('2002-10-20', 0, NULL, NULL),('2008-09-12', 4, 'd', 'd'),
|
|
('2006-06-16', 8, 'g', 'g'),('2004-09-18', NULL, 'x', 'x'),
|
|
('1900-01-01', NULL, 'f', 'f'),('2005-09-13', 0, 'p', 'p'),
|
|
('2007-04-09', NULL, 'j', 'j'),('2000-09-20', 8, 'c', 'c');
|
|
CREATE TABLE t3 (
|
|
pk int(11) NOT NULL,
|
|
col_varchar_nokey varchar(1) DEFAULT NULL,
|
|
PRIMARY KEY (pk)
|
|
) charset utf8mb4;
|
|
Warnings:
|
|
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
|
INSERT INTO t3 VALUES (1, 'c'),(2, 'c'),(3, 'q'),(4, 'g'),(5, 'e'),(6, 'l'),
|
|
(7, NULL),(8, 'v'),(9, 'c'),(10, 'u'),(11, 'x'),(12, 'x'),(13, 'x'),(14, 'l'),
|
|
(15, 'e'),(16, 's'),(17, 'k'),(18, 'm'),(19, 'x'),(20, 's');
|
|
ANALYZE TABLE t1,t2,t3;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
test.t3 analyze status OK
|
|
EXPLAIN SELECT r1.col_date_key
|
|
FROM t2 AS r1
|
|
WHERE r1.col_int_key NOT IN
|
|
(SELECT ir2.pk
|
|
FROM t2 AS ir1 STRAIGHT_JOIN t1 AS ir2
|
|
ON ir2.col_varchar_nokey = ir1.col_varchar_key
|
|
WHERE ir2.col_varchar_nokey > r1.col_varchar_nokey
|
|
AND ir2.pk IN
|
|
(SELECT iir2.pk
|
|
FROM t2 AS iir1 RIGHT JOIN t3 AS iir2
|
|
ON iir2.col_varchar_nokey = iir1.col_varchar_key))
|
|
ORDER BY r1.col_date_key;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY r1 NULL ALL NULL NULL NULL NULL 20 100.00 Using where; Using filesort
|
|
2 DEPENDENT SUBQUERY iir2 NULL eq_ref PRIMARY PRIMARY 4 func 1 100.00 Using where; LooseScan; Full scan on NULL key
|
|
2 DEPENDENT SUBQUERY iir1 NULL ref col_varchar_key col_varchar_key 7 test.iir2.col_varchar_nokey 1 100.00 Using index; FirstMatch(iir2)
|
|
2 DEPENDENT SUBQUERY ir1 NULL index col_varchar_key col_varchar_key 12 NULL 20 100.00 Using where; Using index; Using join buffer (Block Nested Loop)
|
|
2 DEPENDENT SUBQUERY ir2 NULL eq_ref PRIMARY PRIMARY 4 func 1 100.00 Using where; Full scan on NULL key
|
|
SELECT r1.col_date_key
|
|
FROM t2 AS r1
|
|
WHERE r1.col_int_key NOT IN
|
|
(SELECT ir2.pk
|
|
FROM t2 AS ir1 STRAIGHT_JOIN t1 AS ir2
|
|
ON ir2.col_varchar_nokey = ir1.col_varchar_key
|
|
WHERE ir2.col_varchar_nokey > r1.col_varchar_nokey
|
|
AND ir2.pk IN
|
|
(SELECT iir2.pk
|
|
FROM t2 AS iir1 RIGHT JOIN t3 AS iir2
|
|
ON iir2.col_varchar_nokey = iir1.col_varchar_key))
|
|
ORDER BY r1.col_date_key;
|
|
col_date_key
|
|
2000-04-10
|
|
2000-09-20
|
|
2000-12-03
|
|
2002-10-20
|
|
2002-11-05
|
|
2004-09-18
|
|
2005-09-13
|
|
2006-06-16
|
|
2007-01-08
|
|
2007-06-14
|
|
2007-11-17
|
|
2008-05-03
|
|
2008-06-10
|
|
2008-09-12
|
|
2009-02-23
|
|
SELECT COUNT(r1.col_date_key) AS COUNT_NUM
|
|
FROM t2 AS r1
|
|
WHERE r1.col_int_key NOT IN
|
|
(SELECT ir2.pk
|
|
FROM t2 AS ir1 STRAIGHT_JOIN t1 AS ir2
|
|
ON ir2.col_varchar_nokey = ir1.col_varchar_key
|
|
WHERE ir2.col_varchar_nokey > r1.col_varchar_nokey
|
|
AND ir2.pk IN
|
|
(SELECT iir2.pk
|
|
FROM t2 AS iir1 RIGHT JOIN t3 AS iir2
|
|
ON iir2.col_varchar_nokey = iir1.col_varchar_key
|
|
WHERE iir2.pk<3));
|
|
COUNT_NUM
|
|
15
|
|
DROP TABLE t1,t2,t3;
|
|
#
|
|
# Bug#20554585 ASSERT JOIN()->TABLES == 0... IN JOIN_TAB::GET_SJ_STRATEGY ON SUBQUERY + VAR
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk int NOT NULL,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
CREATE TABLE t2 (
|
|
pk int NOT NULL,
|
|
col_int_key int,
|
|
col_varchar_key varchar(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
);
|
|
CREATE TABLE t3 (
|
|
pk int NOT NULL,
|
|
col_int_key int,
|
|
col_varchar_key varchar(1),
|
|
col_varchar varchar(1),
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
);
|
|
INSERT INTO t3 VALUES (1,4,'c','g'),(20,1,'i','p');
|
|
CREATE TABLE t4 (
|
|
col_int int
|
|
);
|
|
CREATE TABLE t5 (
|
|
col_varchar_key varchar(1),
|
|
pk int NOT NULL,
|
|
col_int int,
|
|
PRIMARY KEY (pk),
|
|
KEY col_varchar_key (col_varchar_key)
|
|
);
|
|
SELECT table1.col_varchar_key AS field1
|
|
FROM (t3 AS table1
|
|
INNER JOIN (
|
|
SELECT SUBQUERY1_t1.*
|
|
FROM (t1 AS SUBQUERY1_t1
|
|
RIGHT JOIN (t2 AS SUBQUERY1_t2
|
|
INNER JOIN t3 AS SUBQUERY1_t3
|
|
ON (SUBQUERY1_t3.col_varchar_key = SUBQUERY1_t2.col_varchar_key)
|
|
) ON (SUBQUERY1_t3.col_int_key = SUBQUERY1_t2.pk)
|
|
)
|
|
WHERE SUBQUERY1_t2.col_varchar_key >= ANY (
|
|
SELECT CHILD_SUBQUERY1_t2.col_varchar AS CHILD_SUBQUERY1_field1
|
|
FROM (t2 AS CHILD_SUBQUERY1_t1
|
|
LEFT OUTER JOIN t3 AS CHILD_SUBQUERY1_t2
|
|
ON (CHILD_SUBQUERY1_t2.col_int_key = CHILD_SUBQUERY1_t1.col_int_key)
|
|
)
|
|
WHERE CHILD_SUBQUERY1_t1.pk >= SUBQUERY1_t2.pk
|
|
)
|
|
) AS table2
|
|
ON (table2.pk = table1.pk)
|
|
)
|
|
WHERE (EXISTS ((
|
|
SELECT DISTINCT SUBQUERY2_t2.col_int AS SUBQUERY2_field1
|
|
FROM (t4 AS SUBQUERY2_t1
|
|
LEFT OUTER JOIN t5 AS SUBQUERY2_t2
|
|
ON (SUBQUERY2_t2.pk = SUBQUERY2_t1.col_int)
|
|
)
|
|
WHERE SUBQUERY2_t2.col_varchar_key != @var4
|
|
)))
|
|
AND table1.col_int_key < (35 + 192)
|
|
ORDER BY field1
|
|
;
|
|
field1
|
|
DROP TABLE t1, t2, t3, t4, t5;
|
|
#
|
|
# Bug#18892055: MISSING DATA ON SELECT ... IN WITH JOINS AND INNODB
|
|
# ENGINE
|
|
#
|
|
CREATE TABLE t1 (
|
|
col_int_key INT,
|
|
pk INT NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY col_int_key (col_int_key)
|
|
) ENGINE = INNODB;
|
|
INSERT INTO t1 VALUES
|
|
( 0, 3 ),
|
|
( 0, 4 ),
|
|
( 3, 1 ),
|
|
( 900000000, 2 ),
|
|
( 1368719360, 5 ),
|
|
( 1922236416, 6 ),
|
|
( 8,7 );
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL,
|
|
col_int INT,
|
|
PRIMARY KEY (pk)
|
|
) ENGINE = INNODB;
|
|
INSERT INTO t2 VALUES
|
|
( 1, 3 ),
|
|
( 2, 2 ),
|
|
( 3, 8 ),
|
|
( 4, 7 );
|
|
CREATE TABLE t3 (
|
|
col_int_key INT,
|
|
col_int INT,
|
|
KEY (col_int_key)
|
|
) ENGINE = INNODB;
|
|
INSERT INTO t3 VALUES
|
|
( 5, 1 ),
|
|
( -1, -1 ),
|
|
( 300000000, 1 ),
|
|
( 8, 1 );
|
|
CREATE TABLE t4 ( col_int_key INT ) ENGINE = INNODB;
|
|
INSERT INTO t4 VALUES
|
|
(0),
|
|
(3),
|
|
(8),
|
|
(900000000),
|
|
(1368719360),
|
|
(1922236416);
|
|
ANALYZE TABLE t1, t2, t3, t4;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
test.t3 analyze status OK
|
|
test.t4 analyze status OK
|
|
explain SELECT *
|
|
FROM t4
|
|
WHERE (col_int_key) IN (
|
|
SELECT t1.col_int_key
|
|
FROM t1 LEFT JOIN ( t2 JOIN t3 ON t3.col_int_key = t2.col_int ) USING ( pk )
|
|
WHERE t3.col_int IS NULL
|
|
)
|
|
ORDER BY col_int_key
|
|
;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL index col_int_key col_int_key 5 NULL 7 85.71 Using index; Using temporary; Using filesort; LooseScan
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY PRIMARY 4 test.t1.pk 1 100.00 NULL
|
|
1 SIMPLE t3 NULL ref col_int_key col_int_key 5 test.t2.col_int 1 25.00 Using where; FirstMatch(t1)
|
|
1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t4`.`col_int_key` AS `col_int_key` from `test`.`t4` semi join (`test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(((`test`.`t1`.`pk` = `test`.`t2`.`pk`) and (`test`.`t3`.`col_int_key` = `test`.`t2`.`col_int`)))) where ((`test`.`t4`.`col_int_key` = `test`.`t1`.`col_int_key`) and (`test`.`t3`.`col_int` is null)) order by `test`.`t4`.`col_int_key`
|
|
explain format=tree SELECT *
|
|
FROM t4
|
|
WHERE (col_int_key) IN (
|
|
SELECT t1.col_int_key
|
|
FROM t1 LEFT JOIN ( t2 JOIN t3 ON t3.col_int_key = t2.col_int ) USING ( pk )
|
|
WHERE t3.col_int IS NULL
|
|
)
|
|
ORDER BY col_int_key
|
|
;
|
|
EXPLAIN
|
|
-> Sort: <temporary>.col_int_key
|
|
-> Stream results
|
|
-> Inner hash join (t4.col_int_key = t1.col_int_key)
|
|
-> Table scan on t4 (cost=0.35 rows=6)
|
|
-> Hash
|
|
-> Remove duplicates from input sorted on col_int_key
|
|
-> Filter: (t3.col_int is null)
|
|
-> Nested loop left join
|
|
-> Index scan on t1 using col_int_key (cost=0.85 rows=7)
|
|
-> Limit: 1 row(s)
|
|
-> Nested loop inner join (cost=2.16 rows=1)
|
|
-> Single-row index lookup on t2 using PRIMARY (pk=t1.pk) (cost=0.26 rows=1)
|
|
-> Index lookup on t3 using col_int_key (col_int_key=t2.col_int) (cost=0.05 rows=1)
|
|
|
|
SELECT *
|
|
FROM t4
|
|
WHERE (col_int_key) IN (
|
|
SELECT t1.col_int_key
|
|
FROM t1 LEFT JOIN ( t2 JOIN t3 ON t3.col_int_key = t2.col_int ) USING ( pk )
|
|
WHERE t3.col_int IS NULL
|
|
)
|
|
ORDER BY col_int_key
|
|
;
|
|
col_int_key
|
|
0
|
|
3
|
|
8
|
|
900000000
|
|
1368719360
|
|
1922236416
|
|
DROP TABLE t1, t2, t3, t4;
|
|
#
|
|
# Bug#20835095 CRASH AT CREATE_REF_FOR_KEY IN SQL/SQL_SELECT.CC
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER,
|
|
var_10_latin1 VARCHAR(10) CHARACTER SET latin1,
|
|
var_255_utf8 VARCHAR(255) CHARACTER SET utf8,
|
|
var_255_latin1 VARCHAR(255) CHARACTER SET latin1,
|
|
var_10_utf8 VARCHAR(10) CHARACTER SET utf8,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
INSERT INTO t1 VALUES
|
|
(1,'FROCJ','korrhrspki','UAYVL','BPZIS'),
|
|
(2,'him','a','CHYKN','OZZQT'),
|
|
(3,'WBITK','ULWBF','have','rhrh'),
|
|
(4,'or','right','up','it'),
|
|
(5,'GGDCP','x','who','as'),
|
|
(6,'j','i','e','w');
|
|
CREATE TABLE tv
|
|
SELECT var_255_utf8 AS field1
|
|
FROM t1;
|
|
EXPLAIN SELECT * FROM tv
|
|
WHERE field1 IN (
|
|
SELECT tv1.var_255_utf8
|
|
FROM v1 AS tv1 LEFT JOIN v1 AS tv2 ON tv1.var_10_latin1=tv2.var_10_utf8);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 6 100.00 Start temporary
|
|
1 SIMPLE tv NULL ALL NULL NULL NULL NULL 6 16.67 Using where; Using join buffer (Block Nested Loop)
|
|
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 6 100.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`tv`.`field1` AS `field1` from `test`.`tv` semi join (`test`.`t1` left join (`test`.`t1`) on((convert(`test`.`t1`.`var_10_latin1` using utf8) = `test`.`t1`.`var_10_utf8`))) where (`test`.`tv`.`field1` = `test`.`t1`.`var_255_utf8`)
|
|
SELECT * FROM tv
|
|
WHERE field1 IN (
|
|
SELECT tv1.var_255_utf8
|
|
FROM v1 AS tv1 LEFT JOIN v1 AS tv2 ON tv1.var_10_latin1=tv2.var_10_utf8);
|
|
field1
|
|
korrhrspki
|
|
a
|
|
ULWBF
|
|
right
|
|
x
|
|
i
|
|
DROP VIEW v1;
|
|
DROP TABLE t1, tv;
|
|
# 17832047 Crash in calculate_materialization_costs
|
|
CREATE TABLE t1(a INTEGER PRIMARY KEY);
|
|
INSERT INTO t1 VALUES (0),(1),(2);
|
|
SELECT 1 FROM t1
|
|
WHERE 1 IN
|
|
(SELECT 1 BETWEEN (LENGTH(a) IN (SELECT 1 FROM t1)) AND 1
|
|
FROM t1
|
|
);
|
|
1
|
|
1
|
|
1
|
|
1
|
|
DROP TABLE t1;
|
|
# 17845989 Assertion failed: !(used_tables() & ...
|
|
CREATE TABLE a(b INTEGER) engine=innodb;
|
|
CREATE TABLE c(a INTEGER) engine=innodb;
|
|
SELECT 1
|
|
FROM a
|
|
WHERE 1 IN (SELECT (a.b IS NULL) IN (SELECT 1 FROM c) FROM c)
|
|
;
|
|
1
|
|
DROP TABLE a, c;
|
|
#
|
|
# Bug#18194196: OPTIMIZER EXECUTES STATEMENT INPERFORMANT
|
|
#
|
|
CREATE TABLE t1 (uid INTEGER, fid INTEGER, INDEX(uid));
|
|
INSERT INTO t1 VALUES
|
|
(1,1), (1,2), (1,3), (1,4),
|
|
(2,5), (2,6), (2,7), (2,8),
|
|
(3,1), (3,2), (3,9);
|
|
CREATE TABLE t2 (uid INT PRIMARY KEY, name VARCHAR(128), INDEX(name));
|
|
INSERT INTO t2 VALUES
|
|
(1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
|
|
(6, "F"), (7, "G"), (8, "H"), (9, "I");
|
|
CREATE TABLE t3 (uid INT, fid INT, INDEX(uid));
|
|
INSERT INTO t3 VALUES
|
|
(1,1), (1,2), (1,3),(1,4),
|
|
(2,5), (2,6), (2,7), (2,8),
|
|
(3,1), (3,2), (3,9);
|
|
CREATE TABLE t4 (uid INT PRIMARY KEY, name VARCHAR(128), INDEX(name));
|
|
INSERT INTO t4 VALUES
|
|
(1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
|
|
(6, "F"), (7, "G"), (8, "H"), (9, "I");
|
|
ANALYZE TABLE t1,t2,t3,t4;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
test.t3 analyze status OK
|
|
test.t4 analyze status OK
|
|
EXPLAIN SELECT name FROM t2, t1
|
|
WHERE t1.uid IN (SELECT t4.uid FROM t4, t3 WHERE t3.uid=1 AND t4.uid=t3.fid)
|
|
AND t2.uid=t1.fid;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t3 NULL ref uid uid 5 const 4 100.00 Using where; Start temporary
|
|
1 SIMPLE t4 NULL eq_ref PRIMARY PRIMARY 4 test.t3.fid 1 100.00 Using index
|
|
1 SIMPLE t1 NULL ref uid uid 5 test.t3.fid 4 100.00 Using where; End temporary
|
|
1 SIMPLE t2 NULL eq_ref PRIMARY PRIMARY 4 test.t1.fid 1 100.00 NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`name` AS `name` from `test`.`t4` join `test`.`t2` join `test`.`t1` semi join (`test`.`t3`) where ((`test`.`t4`.`uid` = `test`.`t3`.`fid`) and (`test`.`t1`.`uid` = `test`.`t3`.`fid`) and (`test`.`t3`.`uid` = 1) and (`test`.`t2`.`uid` = `test`.`t1`.`fid`))
|
|
FLUSH STATUS;
|
|
SELECT name FROM t2, t1
|
|
WHERE t1.uid IN (SELECT t4.uid FROM t4, t3 WHERE t3.uid=1 AND t4.uid=t3.fid)
|
|
AND t2.uid=t1.fid;
|
|
name
|
|
A
|
|
B
|
|
C
|
|
D
|
|
E
|
|
F
|
|
G
|
|
H
|
|
A
|
|
B
|
|
I
|
|
SHOW STATUS LIKE '%handler_read%';
|
|
Variable_name Value
|
|
Handler_read_first 0
|
|
Handler_read_key 20
|
|
Handler_read_last 0
|
|
Handler_read_next 15
|
|
Handler_read_prev 0
|
|
Handler_read_rnd 0
|
|
Handler_read_rnd_next 0
|
|
DROP TABLE t1,t2,t3,t4;
|
|
# End of test for Bug#18194196
|
|
#
|
|
# Bug#21184091 ASSERT `READ_ROWS >= 0.0' AT
|
|
# COST_MODEL_SERVER::TMPTABLE_READWRITE_COST()
|
|
#
|
|
CREATE TABLE t1 (
|
|
pk INTEGER,
|
|
col_varchar varchar(1),
|
|
col_int INTEGER,
|
|
PRIMARY KEY (pk)
|
|
) ENGINE=MyISAM;
|
|
CREATE TABLE t2 (
|
|
col_int INTEGER,
|
|
col_varchar varchar(1)
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO t2 VALUES (7,'x');
|
|
INSERT INTO t2 VALUES (4,'z');
|
|
SELECT t2.col_varchar
|
|
FROM t2 STRAIGHT_JOIN t1 ON t2.col_varchar = t1.col_varchar
|
|
JOIN t2 AS table3 ON t1.pk = table3.col_int
|
|
WHERE t1.pk IN (SELECT col_int FROM t1);
|
|
col_varchar
|
|
DROP TABLE t1,t2;
|
|
# End of test for Bug#21184091
|
|
# Bug#21139722: Assertion failed: !(used_tables() & ((table_map) 1) ...
|
|
CREATE TABLE t1(a INTEGER) engine=innodb;
|
|
CREATE TABLE t2(b INTEGER) engine=innodb;
|
|
explain SELECT 1
|
|
FROM (SELECT 1 IN (SELECT 1
|
|
FROM t1
|
|
WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2)
|
|
)
|
|
FROM t2
|
|
) AS z;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY <derived2> NULL ALL NULL NULL NULL NULL 2 100.00 NULL
|
|
2 DERIVED t2 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
3 DEPENDENT SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
|
|
5 DEPENDENT SUBQUERY t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
|
|
4 DEPENDENT SUBQUERY t2 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
Warnings:
|
|
Note 1276 Field or reference 'b' of SELECT #4 was resolved in SELECT #2
|
|
Note 1003 /* select#1 */ select 1 AS `1` from (/* select#2 */ select <in_optimizer>(1,<exists>(/* select#3 */ select 1 from `test`.`t1` where <in_optimizer>((/* select#4 */ select 1 from `test`.`t2` having (0 <> `test`.`t2`.`b`)),<exists>(/* select#5 */ select 1 from `test`.`t2` where <if>(outer_field_is_not_null, (<cache>((/* select#4 */ select 1 from `test`.`t2` having (0 <> `test`.`t2`.`b`))) = 1), true)) is false))) AS `1 IN (SELECT 1
|
|
FROM t1
|
|
WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2)
|
|
)` from `test`.`t2`) `z`
|
|
SELECT 1
|
|
FROM (SELECT 1 IN (SELECT 1
|
|
FROM t1
|
|
WHERE (SELECT 1 FROM t2 HAVING b) NOT IN (SELECT 1 FROM t2)
|
|
)
|
|
FROM t2
|
|
) AS z;
|
|
1
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1(a INTEGER) engine=innodb;
|
|
explain SELECT (SELECT a FROM t1 AS t2
|
|
WHERE a IN (SELECT t1.a+t2.a FROM t1 AS t3))
|
|
FROM t1 AS t1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
|
|
2 DEPENDENT SUBQUERY t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Start temporary
|
|
2 DEPENDENT SUBQUERY t3 NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
|
|
Warnings:
|
|
Note 1276 Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #1
|
|
Note 1276 Field or reference 'test.t2.a' of SELECT #3 was resolved in SELECT #2
|
|
Note 1003 /* select#1 */ select (/* select#2 */ select `test`.`t2`.`a` from `test`.`t1` `t2` semi join (`test`.`t1` `t3`) where (`test`.`t2`.`a` = (`test`.`t1`.`a` + `test`.`t2`.`a`))) AS `(SELECT a FROM t1 AS t2
|
|
WHERE a IN (SELECT t1.a+t2.a FROM t1 AS t3))` from `test`.`t1`
|
|
SELECT (SELECT a FROM t1 AS t2
|
|
WHERE a IN (SELECT t1.a+t2.a FROM t1 AS t3))
|
|
FROM t1 AS t1;
|
|
(SELECT a FROM t1 AS t2
|
|
WHERE a IN (SELECT t1.a+t2.a FROM t1 AS t3))
|
|
DROP TABLE t1;
|
|
# End of test for Bug#21139722
|
|
SET DEFAULT_STORAGE_ENGINE=INNODB;
|
|
#
|
|
# Bug#21139402 ASSERTION FAILED: LENGTH > 0 && KEYPARTS != 0, CRASH IN JOIN::OPTIMIZE_KEYUSE
|
|
#
|
|
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a));
|
|
CREATE TABLE t2 (c INT PRIMARY KEY);
|
|
EXPLAIN SELECT 1 FROM t1
|
|
WHERE 1 IN
|
|
(SELECT (c IS NULL) IN (SELECT a FROM t1 WHERE b) FROM t2);
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
|
3 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t2`) where false
|
|
SELECT 1 FROM t1
|
|
WHERE 1 IN
|
|
(SELECT (c IS NULL) IN (SELECT a FROM t1 WHERE b) FROM t2);
|
|
1
|
|
DROP TABLE t1,t2;
|
|
#
|
|
# Bug#21619634 ACCESS OF DEALLOCATED ITEM_OUTER_REF CAUSES CRASH: PREPARED STMT
|
|
#
|
|
create table cc (i int) engine="innodb";
|
|
insert into cc values (1);
|
|
select (select count(i) from cc as cc_alias
|
|
where (cc.i in (select cc_alias.i from cc)))
|
|
from cc group by i;
|
|
(select count(i) from cc as cc_alias
|
|
where (cc.i in (select cc_alias.i from cc)))
|
|
1
|
|
prepare stmt from
|
|
"select (select count(i) from cc as cc_alias
|
|
where (cc.i in (select cc_alias.i from cc)))
|
|
from cc group by i";
|
|
execute stmt;
|
|
(select count(i) from cc as cc_alias
|
|
where (cc.i in (select cc_alias.i from cc)))
|
|
1
|
|
execute stmt;
|
|
(select count(i) from cc as cc_alias
|
|
where (cc.i in (select cc_alias.i from cc)))
|
|
1
|
|
drop table cc;
|
|
#
|
|
# Bug #22305361: QUERY WITH MATERIALIZED TABLE RETURNS INCORRECT
|
|
# RESULTS IN 5.6
|
|
#
|
|
CREATE TABLE t(a INT,b INT);
|
|
INSERT INTO t VALUES (1,0),(1,0),(1,0),(1,0),(1,1);
|
|
ANALYZE TABLE t;
|
|
Table Op Msg_type Msg_text
|
|
test.t analyze status OK
|
|
EXPLAIN SELECT *
|
|
FROM t AS t1
|
|
WHERE t1.a IN (SELECT t2.a
|
|
FROM t AS t2
|
|
WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a
|
|
FROM t AS t3
|
|
WHERE t3.b=1));
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 PRIMARY t2 NULL ALL NULL NULL NULL NULL 5 100.00 Using where; Start temporary
|
|
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 5 20.00 Using where; End temporary; Using join buffer (Block Nested Loop)
|
|
3 DEPENDENT SUBQUERY t3 NULL ALL NULL NULL NULL NULL 5 20.00 Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t` `t1` semi join (`test`.`t` `t2`) where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and <in_optimizer>(concat(`test`.`t2`.`a`,''),<exists>(/* select#3 */ select 1 from `test`.`t` `t3` where ((`test`.`t3`.`b` = 1) and <if>(outer_field_is_not_null, ((<cache>(concat(`test`.`t2`.`a`,'')) = `test`.`t3`.`a`) or (`test`.`t3`.`a` is null)), true)) having <if>(outer_field_is_not_null, <is_not_null_test>(`test`.`t3`.`a`), true)) is false))
|
|
SELECT *
|
|
FROM t AS t1
|
|
WHERE t1.a IN (SELECT t2.a
|
|
FROM t AS t2
|
|
WHERE CONCAT(t2.a,'') NOT IN (SELECT t3.a
|
|
FROM t AS t3
|
|
WHERE t3.b=1));
|
|
a b
|
|
DROP TABLE t;
|
|
#
|
|
# Bug#24287772 SUBQUERY RETURNS EMPTY LIST WHILE IDENTICAL QUERY
|
|
# WITH JOIN RETURNS RESULT
|
|
#
|
|
CREATE TABLE t SELECT 4096 c;
|
|
SELECT c FROM t WHERE 1 IN
|
|
(SELECT t.c = page_size FROM information_schema.innodb_cmpmem);
|
|
c
|
|
4096
|
|
DROP TABLE t;
|
|
#
|
|
# Bug #29132639: WL#12470: SIG 6 IN CONNECTJOINS|SQL/SQL_EXECUTOR.C
|
|
#
|
|
CREATE TABLE t1 ( f1 TIME, f2 VARCHAR(1) );
|
|
INSERT INTO t1 VALUES ('08:35:24', 'X'), ('14:51:13', 'S'), ('11:22:33', 'Q');
|
|
CREATE TABLE t2 ( pk INTEGER );
|
|
INSERT INTO t2 VALUES (1), (2);
|
|
ANALYZE TABLE t1, t2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
EXPLAIN FORMAT=tree SELECT * FROM t1 WHERE EXISTS ( SELECT alias1.f2 FROM t2 LEFT JOIN t1 ON 1 LEFT JOIN t1 AS alias1 ON 1 );
|
|
EXPLAIN
|
|
<not executable by iterator executor>
|
|
|
|
SELECT * FROM t1 WHERE EXISTS ( SELECT alias1.f2 FROM t2 LEFT JOIN t1 ON 1 LEFT JOIN t1 AS alias1 ON 1 );
|
|
f1 f2
|
|
08:35:24 X
|
|
14:51:13 S
|
|
11:22:33 Q
|
|
DROP TABLE t1, t2;
|
|
set optimizer_switch=default;
|
|
set optimizer_switch=default;
|