~ubuntu-branches/ubuntu/trusty/mysql-5.6/trusty

« back to all changes in this revision

Viewing changes to mysql-test/r/subquery_sj_all_bka_nixbnl.result

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-12 11:54:27 UTC
  • Revision ID: package-import@ubuntu.com-20140212115427-oq6tfsqxl1wuwehi
Tags: upstream-5.6.15
ImportĀ upstreamĀ versionĀ 5.6.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
set optimizer_switch='batched_key_access=on,block_nested_loop=off,mrr_cost_based=off';
 
2
set optimizer_switch='semijoin=on,materialization=on,firstmatch=on,loosescan=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=off';
 
3
set @old_opt_switch=@@optimizer_switch;
 
4
set optimizer_switch='subquery_materialization_cost_based=off';
 
5
drop table if exists t0, t1, t2, t10, t11, t12;
 
6
create table t1 (a int not null, b int, primary key (a));
 
7
create table t2 (a int not null, primary key (a));
 
8
create table t3 (a int not null, b int, primary key (a));
 
9
insert into t1 values (1,10), (2,20), (3,30),  (4,40);
 
10
insert into t2 values (2), (3), (4), (5);
 
11
insert into t3 values (10,3), (20,4), (30,5);
 
12
select * from t2 where t2.a in (select a from t1);
 
13
a
 
14
2
 
15
3
 
16
4
 
17
explain extended select * from t2 where t2.a in (select a from t1);
 
18
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
19
1       SIMPLE  t2      index   PRIMARY PRIMARY 4       NULL    4       100.00  Using index
 
20
1       SIMPLE  t1      eq_ref  PRIMARY PRIMARY 4       test.t2.a       1       100.00  Using index
 
21
Warnings:
 
22
Note    1003    /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t1` join `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`a`)
 
23
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
 
24
a
 
25
2
 
26
4
 
27
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
 
28
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
29
1       SIMPLE  t2      index   PRIMARY PRIMARY 4       NULL    4       100.00  Using index
 
30
1       SIMPLE  t1      eq_ref  PRIMARY PRIMARY 4       test.t2.a       1       100.00  Using where; Using join buffer (Batched Key Access)
 
31
Warnings:
 
32
Note    1003    /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t1` join `test`.`t2` where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`b` <> 30))
 
33
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
 
34
a
 
35
2
 
36
3
 
37
explain extended select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
 
38
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
39
1       SIMPLE  t2      index   PRIMARY PRIMARY 4       NULL    4       100.00  Using index
 
40
1       SIMPLE  t1      eq_ref  PRIMARY PRIMARY 4       test.t2.a       1       100.00  Using where; Using join buffer (Batched Key Access)
 
41
1       SIMPLE  t3      eq_ref  PRIMARY PRIMARY 4       test.t1.b       1       100.00  Using index
 
42
Warnings:
 
43
Note    1003    /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t1` join `test`.`t3` join `test`.`t2` where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t3`.`a` = `test`.`t1`.`b`))
 
44
drop table t1, t2, t3;
 
45
create table t1 (a int, b int, index a (a,b));
 
46
create table t2 (a int, index a (a));
 
47
create table t3 (a int, b int, index a (a));
 
48
insert into t1 values (1,10), (2,20), (3,30), (4,40);
 
49
create table t0(a int);
 
50
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
51
insert into t1
 
52
select rand()*100000+200,rand()*100000 from t0 A, t0 B, t0 C, t0 D;
 
53
insert into t2 values (2), (3), (4), (5);
 
54
insert into t3 values (10,3), (20,4), (30,5);
 
55
select * from t2 where t2.a in (select a from t1);
 
56
a
 
57
2
 
58
3
 
59
4
 
60
explain extended select * from t2 where t2.a in (select a from t1);
 
61
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
62
1       SIMPLE  t2      index   a       a       5       NULL    4       100.00  Using where; Using index
 
63
1       SIMPLE  t1      ref     a       a       5       test.t2.a       101     100.00  Using index; FirstMatch(t2)
 
64
Warnings:
 
65
Note    1003    /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where (`test`.`t1`.`a` = `test`.`t2`.`a`)
 
66
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
 
67
a
 
68
2
 
69
4
 
70
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
 
71
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
72
1       SIMPLE  t2      index   a       a       5       NULL    4       100.00  Using where; Using index
 
73
1       SIMPLE  t1      ref     a       a       5       test.t2.a       101     100.00  Using where; Using index; FirstMatch(t2)
 
74
Warnings:
 
75
Note    1003    /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`b` <> 30))
 
76
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
 
77
a
 
78
2
 
79
3
 
80
explain extended select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
 
81
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
82
1       SIMPLE  t2      index   a       a       5       NULL    4       100.00  Using where; Using index
 
83
1       SIMPLE  t3      index   a       a       5       NULL    3       100.00  Using where; Using index
 
84
1       SIMPLE  t1      ref     a       a       10      test.t2.a,test.t3.a     116     100.00  Using index; FirstMatch(t2)
 
85
Warnings:
 
86
Note    1003    /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1` join `test`.`t3`) where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`b` = `test`.`t3`.`a`))
 
87
insert into t1 values (3,31);
 
88
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
 
89
a
 
90
2
 
91
3
 
92
4
 
93
select * from t2 where t2.a in (select a from t1 where t1.b <> 30 and t1.b <> 31);
 
94
a
 
95
2
 
96
4
 
97
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
 
98
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
99
1       SIMPLE  t2      index   a       a       5       NULL    4       100.00  Using where; Using index
 
100
1       SIMPLE  t1      ref     a       a       5       test.t2.a       101     100.00  Using where; Using index; FirstMatch(t2)
 
101
Warnings:
 
102
Note    1003    /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`b` <> 30))
 
103
drop table t0, t1, t2, t3;
 
104
create table t0 (a int);
 
105
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
106
create table t1(a int, b int);
 
107
insert into t1 values (0,0),(1,1),(2,2);
 
108
create table t2 as select * from t1;
 
109
create table t11(a int, b int);
 
110
create table t10 (pk int, a int, primary key(pk));
 
111
insert into t10 select a,a from t0;
 
112
create table t12 like t10;
 
113
insert into t12 select * from t10;
 
114
Flattened because of dependency, t10=func(t1)
 
115
explain select * from t1 where a in (select pk from t10);
 
116
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
117
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
118
1       SIMPLE  t10     eq_ref  PRIMARY PRIMARY 4       test.t1.a       1       Using index
 
119
select * from t1 where a in (select pk from t10);
 
120
a       b
 
121
0       0
 
122
1       1
 
123
2       2
 
124
A confluent case of dependency
 
125
explain select * from t1 where a in (select a from t10 where pk=12);
 
126
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
127
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
128
select * from t1 where a in (select a from t10 where pk=12);
 
129
a       b
 
130
explain select * from t1 where a in (select a from t10 where pk=9);
 
131
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
132
1       SIMPLE  t10     const   PRIMARY PRIMARY 4       const   1       NULL
 
133
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
134
select * from t1 where a in (select a from t10 where pk=9);
 
135
a       b
 
136
An empty table inside
 
137
explain select * from t1 where a in (select a from t11);
 
138
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
139
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
140
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
141
2       MATERIALIZED    t11     ALL     NULL    NULL    NULL    NULL    0       NULL
 
142
select * from t1 where a in (select a from t11);
 
143
a       b
 
144
explain select * from t1 where a in (select pk from t10) and b in (select pk from t10);
 
145
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
146
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
147
1       SIMPLE  t10     eq_ref  PRIMARY PRIMARY 4       test.t1.a       1       Using index
 
148
1       SIMPLE  t10     eq_ref  PRIMARY PRIMARY 4       test.t1.b       1       Using index
 
149
select * from t1 where a in (select pk from t10) and b in (select pk from t10);
 
150
a       b
 
151
0       0
 
152
1       1
 
153
2       2
 
154
flattening a nested subquery
 
155
explain select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
 
156
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
157
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
158
1       SIMPLE  t10     eq_ref  PRIMARY PRIMARY 4       test.t1.a       1       Using where; Using join buffer (Batched Key Access)
 
159
1       SIMPLE  t12     eq_ref  PRIMARY PRIMARY 4       test.t10.a      1       Using index
 
160
select * from t1 where a in (select pk from t10 where t10.a in (select pk from t12));
 
161
a       b
 
162
0       0
 
163
1       1
 
164
2       2
 
165
flattening subquery w/ several tables
 
166
explain extended select * from t1 where a in (select t10.pk from t10, t12 where t12.pk=t10.a);
 
167
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
168
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
169
1       SIMPLE  t10     eq_ref  PRIMARY PRIMARY 4       test.t1.a       1       100.00  Using where; Using join buffer (Batched Key Access)
 
170
1       SIMPLE  t12     eq_ref  PRIMARY PRIMARY 4       test.t10.a      1       100.00  Using index
 
171
Warnings:
 
172
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`))
 
173
subqueries within outer joins go into ON expr.
 
174
explAin extended
 
175
select * from t1 left join (t2 A, t2 B) on ( A.A= t1.A And B.A in (select pk from t10));
 
176
id      select_type     tABle   type    possiBle_keys   key     key_len ref     rows    filtered        ExtrA
 
177
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
178
1       SIMPLE  A       ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
179
1       SIMPLE  B       ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
180
1       SIMPLE  t10     eq_ref  PRIMARY PRIMARY 4       test.B.A        1       100.00  Using index
 
181
Warnings:
 
182
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`.`A`.`A` = `test`.`t1`.`A`) And 1 And (`test`.`B`.`A` = `test`.`t10`.`pk`))) where 1
 
183
t2 should be wrapped into OJ-nest, so we have "t1 LJ (t2 J t10)"
 
184
explAin extended
 
185
select * from t1 left join t2 on (t2.A= t1.A And t2.A in (select pk from t10));
 
186
id      select_type     tABle   type    possiBle_keys   key     key_len ref     rows    filtered        ExtrA
 
187
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
188
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
189
1       SIMPLE  t10     eq_ref  PRIMARY PRIMARY 4       test.t2.A       1       100.00  Using index
 
190
Warnings:
 
191
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`.`t2`.`A` = `test`.`t1`.`A`) And 1 And (`test`.`t2`.`A` = `test`.`t10`.`pk`))) where 1
 
192
we shouldn't flatten if we're going to get a join of > MAX_TABLES.
 
193
explain select * from 
 
194
t1 s00, t1 s01,  t1 s02, t1 s03, t1 s04,t1 s05,t1 s06,t1 s07,t1 s08,t1 s09,
 
195
t1 s10, t1 s11,  t1 s12, t1 s13, t1 s14,t1 s15,t1 s16,t1 s17,t1 s18,t1 s19,
 
196
t1 s20, t1 s21,  t1 s22, t1 s23, t1 s24,t1 s25,t1 s26,t1 s27,t1 s28,t1 s29,
 
197
t1 s30, t1 s31,  t1 s32, t1 s33, t1 s34,t1 s35,t1 s36,t1 s37,t1 s38,t1 s39,
 
198
t1 s40, t1 s41,  t1 s42, t1 s43, t1 s44,t1 s45,t1 s46,t1 s47,t1 s48,t1 s49
 
199
where
 
200
s00.a in (
 
201
select m00.a from
 
202
t1 m00, t1 m01,  t1 m02, t1 m03, t1 m04,t1 m05,t1 m06,t1 m07,t1 m08,t1 m09,
 
203
t1 m10, t1 m11,  t1 m12, t1 m13, t1 m14,t1 m15,t1 m16,t1 m17,t1 m18,t1 m19
 
204
);
 
205
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
206
1       PRIMARY s00     ALL     NULL    NULL    NULL    NULL    3       Using where
 
207
1       PRIMARY s01     ALL     NULL    NULL    NULL    NULL    3       NULL
 
208
1       PRIMARY s02     ALL     NULL    NULL    NULL    NULL    3       NULL
 
209
1       PRIMARY s03     ALL     NULL    NULL    NULL    NULL    3       NULL
 
210
1       PRIMARY s04     ALL     NULL    NULL    NULL    NULL    3       NULL
 
211
1       PRIMARY s05     ALL     NULL    NULL    NULL    NULL    3       NULL
 
212
1       PRIMARY s06     ALL     NULL    NULL    NULL    NULL    3       NULL
 
213
1       PRIMARY s07     ALL     NULL    NULL    NULL    NULL    3       NULL
 
214
1       PRIMARY s08     ALL     NULL    NULL    NULL    NULL    3       NULL
 
215
1       PRIMARY s09     ALL     NULL    NULL    NULL    NULL    3       NULL
 
216
1       PRIMARY s10     ALL     NULL    NULL    NULL    NULL    3       NULL
 
217
1       PRIMARY s11     ALL     NULL    NULL    NULL    NULL    3       NULL
 
218
1       PRIMARY s12     ALL     NULL    NULL    NULL    NULL    3       NULL
 
219
1       PRIMARY s13     ALL     NULL    NULL    NULL    NULL    3       NULL
 
220
1       PRIMARY s14     ALL     NULL    NULL    NULL    NULL    3       NULL
 
221
1       PRIMARY s15     ALL     NULL    NULL    NULL    NULL    3       NULL
 
222
1       PRIMARY s16     ALL     NULL    NULL    NULL    NULL    3       NULL
 
223
1       PRIMARY s17     ALL     NULL    NULL    NULL    NULL    3       NULL
 
224
1       PRIMARY s18     ALL     NULL    NULL    NULL    NULL    3       NULL
 
225
1       PRIMARY s19     ALL     NULL    NULL    NULL    NULL    3       NULL
 
226
1       PRIMARY s20     ALL     NULL    NULL    NULL    NULL    3       NULL
 
227
1       PRIMARY s21     ALL     NULL    NULL    NULL    NULL    3       NULL
 
228
1       PRIMARY s22     ALL     NULL    NULL    NULL    NULL    3       NULL
 
229
1       PRIMARY s23     ALL     NULL    NULL    NULL    NULL    3       NULL
 
230
1       PRIMARY s24     ALL     NULL    NULL    NULL    NULL    3       NULL
 
231
1       PRIMARY s25     ALL     NULL    NULL    NULL    NULL    3       NULL
 
232
1       PRIMARY s26     ALL     NULL    NULL    NULL    NULL    3       NULL
 
233
1       PRIMARY s27     ALL     NULL    NULL    NULL    NULL    3       NULL
 
234
1       PRIMARY s28     ALL     NULL    NULL    NULL    NULL    3       NULL
 
235
1       PRIMARY s29     ALL     NULL    NULL    NULL    NULL    3       NULL
 
236
1       PRIMARY s30     ALL     NULL    NULL    NULL    NULL    3       NULL
 
237
1       PRIMARY s31     ALL     NULL    NULL    NULL    NULL    3       NULL
 
238
1       PRIMARY s32     ALL     NULL    NULL    NULL    NULL    3       NULL
 
239
1       PRIMARY s33     ALL     NULL    NULL    NULL    NULL    3       NULL
 
240
1       PRIMARY s34     ALL     NULL    NULL    NULL    NULL    3       NULL
 
241
1       PRIMARY s35     ALL     NULL    NULL    NULL    NULL    3       NULL
 
242
1       PRIMARY s36     ALL     NULL    NULL    NULL    NULL    3       NULL
 
243
1       PRIMARY s37     ALL     NULL    NULL    NULL    NULL    3       NULL
 
244
1       PRIMARY s38     ALL     NULL    NULL    NULL    NULL    3       NULL
 
245
1       PRIMARY s39     ALL     NULL    NULL    NULL    NULL    3       NULL
 
246
1       PRIMARY s40     ALL     NULL    NULL    NULL    NULL    3       NULL
 
247
1       PRIMARY s41     ALL     NULL    NULL    NULL    NULL    3       NULL
 
248
1       PRIMARY s42     ALL     NULL    NULL    NULL    NULL    3       NULL
 
249
1       PRIMARY s43     ALL     NULL    NULL    NULL    NULL    3       NULL
 
250
1       PRIMARY s44     ALL     NULL    NULL    NULL    NULL    3       NULL
 
251
1       PRIMARY s45     ALL     NULL    NULL    NULL    NULL    3       NULL
 
252
1       PRIMARY s46     ALL     NULL    NULL    NULL    NULL    3       NULL
 
253
1       PRIMARY s47     ALL     NULL    NULL    NULL    NULL    3       NULL
 
254
1       PRIMARY s48     ALL     NULL    NULL    NULL    NULL    3       NULL
 
255
1       PRIMARY s49     ALL     NULL    NULL    NULL    NULL    3       NULL
 
256
2       SUBQUERY        m00     ALL     NULL    NULL    NULL    NULL    3       NULL
 
257
2       SUBQUERY        m01     ALL     NULL    NULL    NULL    NULL    3       NULL
 
258
2       SUBQUERY        m02     ALL     NULL    NULL    NULL    NULL    3       NULL
 
259
2       SUBQUERY        m03     ALL     NULL    NULL    NULL    NULL    3       NULL
 
260
2       SUBQUERY        m04     ALL     NULL    NULL    NULL    NULL    3       NULL
 
261
2       SUBQUERY        m05     ALL     NULL    NULL    NULL    NULL    3       NULL
 
262
2       SUBQUERY        m06     ALL     NULL    NULL    NULL    NULL    3       NULL
 
263
2       SUBQUERY        m07     ALL     NULL    NULL    NULL    NULL    3       NULL
 
264
2       SUBQUERY        m08     ALL     NULL    NULL    NULL    NULL    3       NULL
 
265
2       SUBQUERY        m09     ALL     NULL    NULL    NULL    NULL    3       NULL
 
266
2       SUBQUERY        m10     ALL     NULL    NULL    NULL    NULL    3       NULL
 
267
2       SUBQUERY        m11     ALL     NULL    NULL    NULL    NULL    3       NULL
 
268
2       SUBQUERY        m12     ALL     NULL    NULL    NULL    NULL    3       NULL
 
269
2       SUBQUERY        m13     ALL     NULL    NULL    NULL    NULL    3       NULL
 
270
2       SUBQUERY        m14     ALL     NULL    NULL    NULL    NULL    3       NULL
 
271
2       SUBQUERY        m15     ALL     NULL    NULL    NULL    NULL    3       NULL
 
272
2       SUBQUERY        m16     ALL     NULL    NULL    NULL    NULL    3       NULL
 
273
2       SUBQUERY        m17     ALL     NULL    NULL    NULL    NULL    3       NULL
 
274
2       SUBQUERY        m18     ALL     NULL    NULL    NULL    NULL    3       NULL
 
275
2       SUBQUERY        m19     ALL     NULL    NULL    NULL    NULL    3       NULL
 
276
select * from
 
277
t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10)) 
 
278
where t1.a < 5;
 
279
a       b       a       b
 
280
0       0       0       0
 
281
1       1       1       1
 
282
2       2       2       2
 
283
prepare s1 from
 
284
' select * from
 
285
    t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t10))
 
286
  where t1.a < 5';
 
287
execute s1;
 
288
a       b       a       b
 
289
0       0       0       0
 
290
1       1       1       1
 
291
2       2       2       2
 
292
execute s1;
 
293
a       b       a       b
 
294
0       0       0       0
 
295
1       1       1       1
 
296
2       2       2       2
 
297
insert into t1 select (A.a + 10 * B.a),1 from t0 A, t0 B;
 
298
explain extended select * from t1 where a in (select pk from t10 where pk<3);
 
299
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
300
1       SIMPLE  t10     range   PRIMARY PRIMARY 4       NULL    4       100.00  Using where; Using index
 
301
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    103     100.00  Using where
 
302
Warnings:
 
303
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))
 
304
drop table t0, t1, t2;
 
305
drop table t10, t11, t12;
 
306
#
 
307
# Check that subqueries with outer joins or straight_join work for 
 
308
# different permutations of const and non-const tables.  (Ref. Bug#46692)
 
309
#
 
310
CREATE TABLE t1 (i INTEGER);
 
311
CREATE TABLE t2 (i INTEGER);
 
312
CREATE TABLE t3 (i INTEGER);
 
313
SELECT (SELECT COUNT(*) from t1) AS c1,
 
314
(SELECT COUNT(*) from t2) AS c2,
 
315
(SELECT COUNT(*) from t3) AS c3;
 
316
c1      c2      c3
 
317
0       0       0
 
318
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
319
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
320
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
321
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
322
SELECT * FROM t1 WHERE (t1.i) IN 
 
323
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
324
i
 
325
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
326
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
327
EXECUTE stmt;
 
328
i
 
329
EXECUTE stmt;
 
330
i
 
331
DEALLOCATE PREPARE stmt;
 
332
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
333
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
334
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
335
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
336
SELECT * FROM t1 WHERE (t1.i) IN 
 
337
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
338
i
 
339
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
340
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
341
EXECUTE stmt;
 
342
i
 
343
EXECUTE stmt;
 
344
i
 
345
DEALLOCATE PREPARE stmt;
 
346
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
347
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
348
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
349
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
350
SELECT * FROM t1 WHERE (t1.i) IN 
 
351
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
352
i
 
353
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
354
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
355
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
356
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
357
SELECT * FROM t1 WHERE (t1.i) IN 
 
358
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
359
i
 
360
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
361
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
362
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
363
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
364
SELECT * FROM t1 WHERE (11) IN 
 
365
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
366
i
 
367
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
368
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
369
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
370
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
371
SELECT * FROM t1 WHERE (11) IN 
 
372
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
373
i
 
374
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
375
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
376
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
377
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
378
SELECT * FROM t1 WHERE (11) IN 
 
379
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
380
i
 
381
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
382
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
383
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
384
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
385
SELECT * FROM t1 WHERE (11) IN 
 
386
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
387
i
 
388
INSERT INTO t3 VALUES (2);
 
389
SELECT (SELECT COUNT(*) from t1) AS c1,
 
390
(SELECT COUNT(*) from t2) AS c2,
 
391
(SELECT COUNT(*) from t3) AS c3;
 
392
c1      c2      c3
 
393
0       0       1
 
394
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
395
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
396
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
397
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
398
SELECT * FROM t1 WHERE (t1.i) IN 
 
399
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
400
i
 
401
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
402
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
403
EXECUTE stmt;
 
404
i
 
405
EXECUTE stmt;
 
406
i
 
407
DEALLOCATE PREPARE stmt;
 
408
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
409
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
410
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
411
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
412
SELECT * FROM t1 WHERE (t1.i) IN 
 
413
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
414
i
 
415
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
416
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
417
EXECUTE stmt;
 
418
i
 
419
EXECUTE stmt;
 
420
i
 
421
DEALLOCATE PREPARE stmt;
 
422
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
423
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
424
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
425
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
426
SELECT * FROM t1 WHERE (t1.i) IN 
 
427
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
428
i
 
429
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
430
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
431
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
432
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
433
SELECT * FROM t1 WHERE (t1.i) IN 
 
434
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
435
i
 
436
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
437
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
438
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
439
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
440
SELECT * FROM t1 WHERE (11) IN 
 
441
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
442
i
 
443
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
444
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
445
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
446
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
447
SELECT * FROM t1 WHERE (11) IN 
 
448
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
449
i
 
450
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
451
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
452
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
453
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
454
SELECT * FROM t1 WHERE (11) IN 
 
455
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
456
i
 
457
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
458
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
459
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
460
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
461
SELECT * FROM t1 WHERE (11) IN 
 
462
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
463
i
 
464
INSERT INTO t3 VALUES (1);
 
465
SELECT (SELECT COUNT(*) from t1) AS c1,
 
466
(SELECT COUNT(*) from t2) AS c2,
 
467
(SELECT COUNT(*) from t3) AS c3;
 
468
c1      c2      c3
 
469
0       0       2
 
470
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
471
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
472
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
473
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
474
SELECT * FROM t1 WHERE (t1.i) IN 
 
475
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
476
i
 
477
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
478
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
479
EXECUTE stmt;
 
480
i
 
481
EXECUTE stmt;
 
482
i
 
483
DEALLOCATE PREPARE stmt;
 
484
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
485
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
486
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
487
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
488
SELECT * FROM t1 WHERE (t1.i) IN 
 
489
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
490
i
 
491
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
492
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
493
EXECUTE stmt;
 
494
i
 
495
EXECUTE stmt;
 
496
i
 
497
DEALLOCATE PREPARE stmt;
 
498
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
499
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
500
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
501
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
502
SELECT * FROM t1 WHERE (t1.i) IN 
 
503
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
504
i
 
505
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
506
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
507
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
508
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
509
SELECT * FROM t1 WHERE (t1.i) IN 
 
510
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
511
i
 
512
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
513
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
514
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
515
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
516
SELECT * FROM t1 WHERE (11) IN 
 
517
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
518
i
 
519
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
520
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
521
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
522
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
523
SELECT * FROM t1 WHERE (11) IN 
 
524
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
525
i
 
526
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
527
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
528
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
529
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
530
SELECT * FROM t1 WHERE (11) IN 
 
531
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
532
i
 
533
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
534
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
535
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
536
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
537
SELECT * FROM t1 WHERE (11) IN 
 
538
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
539
i
 
540
INSERT INTO t3 VALUES (0);
 
541
DELETE FROM t3;
 
542
INSERT INTO t2 VALUES (2);
 
543
SELECT (SELECT COUNT(*) from t1) AS c1,
 
544
(SELECT COUNT(*) from t2) AS c2,
 
545
(SELECT COUNT(*) from t3) AS c3;
 
546
c1      c2      c3
 
547
0       1       0
 
548
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
549
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
550
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
551
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
552
SELECT * FROM t1 WHERE (t1.i) IN 
 
553
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
554
i
 
555
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
556
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
557
EXECUTE stmt;
 
558
i
 
559
EXECUTE stmt;
 
560
i
 
561
DEALLOCATE PREPARE stmt;
 
562
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
563
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
564
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
565
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
566
SELECT * FROM t1 WHERE (t1.i) IN 
 
567
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
568
i
 
569
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
570
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
571
EXECUTE stmt;
 
572
i
 
573
EXECUTE stmt;
 
574
i
 
575
DEALLOCATE PREPARE stmt;
 
576
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
577
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
578
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
579
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
580
SELECT * FROM t1 WHERE (t1.i) IN 
 
581
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
582
i
 
583
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
584
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
585
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
586
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
587
SELECT * FROM t1 WHERE (t1.i) IN 
 
588
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
589
i
 
590
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
591
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
592
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
593
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
594
SELECT * FROM t1 WHERE (11) IN 
 
595
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
596
i
 
597
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
598
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
599
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
600
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
601
SELECT * FROM t1 WHERE (11) IN 
 
602
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
603
i
 
604
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
605
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
606
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
607
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
608
SELECT * FROM t1 WHERE (11) IN 
 
609
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
610
i
 
611
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
612
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
613
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
614
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
615
SELECT * FROM t1 WHERE (11) IN 
 
616
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
617
i
 
618
INSERT INTO t3 VALUES (2);
 
619
SELECT (SELECT COUNT(*) from t1) AS c1,
 
620
(SELECT COUNT(*) from t2) AS c2,
 
621
(SELECT COUNT(*) from t3) AS c3;
 
622
c1      c2      c3
 
623
0       1       1
 
624
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
625
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
626
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
627
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
628
SELECT * FROM t1 WHERE (t1.i) IN 
 
629
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
630
i
 
631
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
632
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
633
EXECUTE stmt;
 
634
i
 
635
EXECUTE stmt;
 
636
i
 
637
DEALLOCATE PREPARE stmt;
 
638
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
639
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
640
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
641
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
642
SELECT * FROM t1 WHERE (t1.i) IN 
 
643
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
644
i
 
645
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
646
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
647
EXECUTE stmt;
 
648
i
 
649
EXECUTE stmt;
 
650
i
 
651
DEALLOCATE PREPARE stmt;
 
652
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
653
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
654
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
655
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
656
SELECT * FROM t1 WHERE (t1.i) IN 
 
657
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
658
i
 
659
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
660
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
661
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
662
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
663
SELECT * FROM t1 WHERE (t1.i) IN 
 
664
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
665
i
 
666
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
667
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
668
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
669
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
670
SELECT * FROM t1 WHERE (11) IN 
 
671
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
672
i
 
673
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
674
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
675
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
676
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
677
SELECT * FROM t1 WHERE (11) IN 
 
678
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
679
i
 
680
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
681
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
682
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
683
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
684
SELECT * FROM t1 WHERE (11) IN 
 
685
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
686
i
 
687
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
688
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
689
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
690
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
691
SELECT * FROM t1 WHERE (11) IN 
 
692
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
693
i
 
694
INSERT INTO t3 VALUES (1);
 
695
SELECT (SELECT COUNT(*) from t1) AS c1,
 
696
(SELECT COUNT(*) from t2) AS c2,
 
697
(SELECT COUNT(*) from t3) AS c3;
 
698
c1      c2      c3
 
699
0       1       2
 
700
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
701
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
702
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
703
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
704
SELECT * FROM t1 WHERE (t1.i) IN 
 
705
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
706
i
 
707
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
708
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
709
EXECUTE stmt;
 
710
i
 
711
EXECUTE stmt;
 
712
i
 
713
DEALLOCATE PREPARE stmt;
 
714
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
715
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
716
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
717
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
718
SELECT * FROM t1 WHERE (t1.i) IN 
 
719
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
720
i
 
721
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
722
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
723
EXECUTE stmt;
 
724
i
 
725
EXECUTE stmt;
 
726
i
 
727
DEALLOCATE PREPARE stmt;
 
728
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
729
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
730
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
731
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
732
SELECT * FROM t1 WHERE (t1.i) IN 
 
733
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
734
i
 
735
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
736
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
737
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
738
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
739
SELECT * FROM t1 WHERE (t1.i) IN 
 
740
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
741
i
 
742
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
743
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
744
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
745
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
746
SELECT * FROM t1 WHERE (11) IN 
 
747
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
748
i
 
749
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
750
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
751
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
752
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
753
SELECT * FROM t1 WHERE (11) IN 
 
754
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
755
i
 
756
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
757
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
758
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
759
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
760
SELECT * FROM t1 WHERE (11) IN 
 
761
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
762
i
 
763
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
764
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
765
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
766
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
767
SELECT * FROM t1 WHERE (11) IN 
 
768
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
769
i
 
770
INSERT INTO t3 VALUES (0);
 
771
DELETE FROM t3;
 
772
INSERT INTO t2 VALUES (1);
 
773
SELECT (SELECT COUNT(*) from t1) AS c1,
 
774
(SELECT COUNT(*) from t2) AS c2,
 
775
(SELECT COUNT(*) from t3) AS c3;
 
776
c1      c2      c3
 
777
0       2       0
 
778
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
779
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
780
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
781
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
782
SELECT * FROM t1 WHERE (t1.i) IN 
 
783
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
784
i
 
785
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
786
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
787
EXECUTE stmt;
 
788
i
 
789
EXECUTE stmt;
 
790
i
 
791
DEALLOCATE PREPARE stmt;
 
792
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
793
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
794
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
795
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
796
SELECT * FROM t1 WHERE (t1.i) IN 
 
797
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
798
i
 
799
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
800
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
801
EXECUTE stmt;
 
802
i
 
803
EXECUTE stmt;
 
804
i
 
805
DEALLOCATE PREPARE stmt;
 
806
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
807
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
808
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
809
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
810
SELECT * FROM t1 WHERE (t1.i) IN 
 
811
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
812
i
 
813
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
814
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
815
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
816
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
817
SELECT * FROM t1 WHERE (t1.i) IN 
 
818
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
819
i
 
820
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
821
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
822
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
823
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
824
SELECT * FROM t1 WHERE (11) IN 
 
825
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
826
i
 
827
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
828
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
829
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
830
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
831
SELECT * FROM t1 WHERE (11) IN 
 
832
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
833
i
 
834
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
835
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
836
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
837
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
838
SELECT * FROM t1 WHERE (11) IN 
 
839
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
840
i
 
841
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
842
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
843
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
844
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
845
SELECT * FROM t1 WHERE (11) IN 
 
846
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
847
i
 
848
INSERT INTO t3 VALUES (2);
 
849
SELECT (SELECT COUNT(*) from t1) AS c1,
 
850
(SELECT COUNT(*) from t2) AS c2,
 
851
(SELECT COUNT(*) from t3) AS c3;
 
852
c1      c2      c3
 
853
0       2       1
 
854
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
855
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
856
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
857
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
858
SELECT * FROM t1 WHERE (t1.i) IN 
 
859
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
860
i
 
861
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
862
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
863
EXECUTE stmt;
 
864
i
 
865
EXECUTE stmt;
 
866
i
 
867
DEALLOCATE PREPARE stmt;
 
868
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
869
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
870
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
871
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
872
SELECT * FROM t1 WHERE (t1.i) IN 
 
873
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
874
i
 
875
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
876
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
877
EXECUTE stmt;
 
878
i
 
879
EXECUTE stmt;
 
880
i
 
881
DEALLOCATE PREPARE stmt;
 
882
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
883
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
884
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
885
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
886
SELECT * FROM t1 WHERE (t1.i) IN 
 
887
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
888
i
 
889
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
890
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
891
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
892
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
893
SELECT * FROM t1 WHERE (t1.i) IN 
 
894
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
895
i
 
896
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
897
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
898
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
899
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
900
SELECT * FROM t1 WHERE (11) IN 
 
901
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
902
i
 
903
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
904
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
905
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
906
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
907
SELECT * FROM t1 WHERE (11) IN 
 
908
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
909
i
 
910
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
911
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
912
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
913
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
914
SELECT * FROM t1 WHERE (11) IN 
 
915
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
916
i
 
917
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
918
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
919
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
920
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
921
SELECT * FROM t1 WHERE (11) IN 
 
922
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
923
i
 
924
INSERT INTO t3 VALUES (1);
 
925
SELECT (SELECT COUNT(*) from t1) AS c1,
 
926
(SELECT COUNT(*) from t2) AS c2,
 
927
(SELECT COUNT(*) from t3) AS c3;
 
928
c1      c2      c3
 
929
0       2       2
 
930
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
931
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
932
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
933
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
934
SELECT * FROM t1 WHERE (t1.i) IN 
 
935
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
936
i
 
937
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
938
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
939
EXECUTE stmt;
 
940
i
 
941
EXECUTE stmt;
 
942
i
 
943
DEALLOCATE PREPARE stmt;
 
944
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
945
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
946
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
947
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
948
SELECT * FROM t1 WHERE (t1.i) IN 
 
949
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
950
i
 
951
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
952
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
953
EXECUTE stmt;
 
954
i
 
955
EXECUTE stmt;
 
956
i
 
957
DEALLOCATE PREPARE stmt;
 
958
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
959
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
960
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
961
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
962
SELECT * FROM t1 WHERE (t1.i) IN 
 
963
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
964
i
 
965
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
966
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
967
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
968
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
969
SELECT * FROM t1 WHERE (t1.i) IN 
 
970
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
971
i
 
972
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
973
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
974
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
975
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
976
SELECT * FROM t1 WHERE (11) IN 
 
977
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
978
i
 
979
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
980
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
981
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
982
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
983
SELECT * FROM t1 WHERE (11) IN 
 
984
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
985
i
 
986
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
987
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
988
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
989
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
990
SELECT * FROM t1 WHERE (11) IN 
 
991
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
992
i
 
993
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
994
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
995
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
996
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
997
SELECT * FROM t1 WHERE (11) IN 
 
998
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
999
i
 
1000
INSERT INTO t3 VALUES (0);
 
1001
DELETE FROM t3;
 
1002
INSERT INTO t2 VALUES (0);
 
1003
DELETE FROM t2;
 
1004
INSERT INTO t1 VALUES (2);
 
1005
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1006
(SELECT COUNT(*) from t2) AS c2,
 
1007
(SELECT COUNT(*) from t3) AS c3;
 
1008
c1      c2      c3
 
1009
1       0       0
 
1010
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1011
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1012
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1013
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1014
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1015
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1016
SELECT * FROM t1 WHERE (t1.i) IN 
 
1017
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1018
i
 
1019
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1020
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1021
EXECUTE stmt;
 
1022
i
 
1023
EXECUTE stmt;
 
1024
i
 
1025
DEALLOCATE PREPARE stmt;
 
1026
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1027
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1028
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1029
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1030
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1031
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1032
SELECT * FROM t1 WHERE (t1.i) IN 
 
1033
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1034
i
 
1035
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1036
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1037
EXECUTE stmt;
 
1038
i
 
1039
EXECUTE stmt;
 
1040
i
 
1041
DEALLOCATE PREPARE stmt;
 
1042
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1043
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1044
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1045
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1046
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1047
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1048
SELECT * FROM t1 WHERE (t1.i) IN 
 
1049
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1050
i
 
1051
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1052
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1053
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1054
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1055
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1056
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1057
SELECT * FROM t1 WHERE (t1.i) IN 
 
1058
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1059
i
 
1060
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1061
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1062
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1063
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1064
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1065
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1066
SELECT * FROM t1 WHERE (11) IN 
 
1067
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1068
i
 
1069
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1070
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1071
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1072
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1073
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1074
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1075
SELECT * FROM t1 WHERE (11) IN 
 
1076
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1077
i
 
1078
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1079
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1080
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1081
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1082
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1083
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1084
SELECT * FROM t1 WHERE (11) IN 
 
1085
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1086
i
 
1087
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1088
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1089
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1090
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1091
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1092
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1093
SELECT * FROM t1 WHERE (11) IN 
 
1094
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1095
i
 
1096
INSERT INTO t3 VALUES (2);
 
1097
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1098
(SELECT COUNT(*) from t2) AS c2,
 
1099
(SELECT COUNT(*) from t3) AS c3;
 
1100
c1      c2      c3
 
1101
1       0       1
 
1102
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1103
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1104
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1105
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1106
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1107
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1108
SELECT * FROM t1 WHERE (t1.i) IN 
 
1109
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1110
i
 
1111
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1112
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1113
EXECUTE stmt;
 
1114
i
 
1115
EXECUTE stmt;
 
1116
i
 
1117
DEALLOCATE PREPARE stmt;
 
1118
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1119
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1120
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1121
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1122
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1123
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1124
SELECT * FROM t1 WHERE (t1.i) IN 
 
1125
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1126
i
 
1127
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1128
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1129
EXECUTE stmt;
 
1130
i
 
1131
EXECUTE stmt;
 
1132
i
 
1133
DEALLOCATE PREPARE stmt;
 
1134
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1135
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1136
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1137
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1138
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1139
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1140
SELECT * FROM t1 WHERE (t1.i) IN 
 
1141
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1142
i
 
1143
2
 
1144
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1145
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1146
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1147
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1148
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1149
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1150
SELECT * FROM t1 WHERE (t1.i) IN 
 
1151
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1152
i
 
1153
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1154
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1155
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1156
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1157
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1158
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1159
SELECT * FROM t1 WHERE (11) IN 
 
1160
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1161
i
 
1162
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1163
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1164
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1165
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1166
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1167
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1168
SELECT * FROM t1 WHERE (11) IN 
 
1169
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1170
i
 
1171
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1172
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1173
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1174
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1175
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1176
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1177
SELECT * FROM t1 WHERE (11) IN 
 
1178
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1179
i
 
1180
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1181
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1182
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1183
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1184
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1185
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1186
SELECT * FROM t1 WHERE (11) IN 
 
1187
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1188
i
 
1189
INSERT INTO t3 VALUES (1);
 
1190
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1191
(SELECT COUNT(*) from t2) AS c2,
 
1192
(SELECT COUNT(*) from t3) AS c3;
 
1193
c1      c2      c3
 
1194
1       0       2
 
1195
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1196
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1197
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1198
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1199
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1200
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1201
SELECT * FROM t1 WHERE (t1.i) IN 
 
1202
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1203
i
 
1204
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1205
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1206
EXECUTE stmt;
 
1207
i
 
1208
EXECUTE stmt;
 
1209
i
 
1210
DEALLOCATE PREPARE stmt;
 
1211
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1212
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1213
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1214
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1215
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1216
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1217
SELECT * FROM t1 WHERE (t1.i) IN 
 
1218
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1219
i
 
1220
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1221
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1222
EXECUTE stmt;
 
1223
i
 
1224
EXECUTE stmt;
 
1225
i
 
1226
DEALLOCATE PREPARE stmt;
 
1227
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1228
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1229
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1230
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1231
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
1232
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1233
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1234
SELECT * FROM t1 WHERE (t1.i) IN 
 
1235
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1236
i
 
1237
2
 
1238
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1239
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1240
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1241
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1242
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1243
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1244
SELECT * FROM t1 WHERE (t1.i) IN 
 
1245
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1246
i
 
1247
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1248
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1249
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1250
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1251
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1252
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1253
SELECT * FROM t1 WHERE (11) IN 
 
1254
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1255
i
 
1256
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1257
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1258
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1259
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1260
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1261
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1262
SELECT * FROM t1 WHERE (11) IN 
 
1263
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1264
i
 
1265
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1266
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1267
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1268
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1269
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
1270
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1271
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1272
SELECT * FROM t1 WHERE (11) IN 
 
1273
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1274
i
 
1275
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1276
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1277
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1278
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1279
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1280
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1281
SELECT * FROM t1 WHERE (11) IN 
 
1282
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1283
i
 
1284
INSERT INTO t3 VALUES (0);
 
1285
DELETE FROM t3;
 
1286
INSERT INTO t2 VALUES (2);
 
1287
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1288
(SELECT COUNT(*) from t2) AS c2,
 
1289
(SELECT COUNT(*) from t3) AS c3;
 
1290
c1      c2      c3
 
1291
1       1       0
 
1292
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1293
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1294
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1295
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1296
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1297
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1298
SELECT * FROM t1 WHERE (t1.i) IN 
 
1299
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1300
i
 
1301
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1302
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1303
EXECUTE stmt;
 
1304
i
 
1305
EXECUTE stmt;
 
1306
i
 
1307
DEALLOCATE PREPARE stmt;
 
1308
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1309
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1310
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1311
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1312
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1313
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1314
SELECT * FROM t1 WHERE (t1.i) IN 
 
1315
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1316
i
 
1317
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1318
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1319
EXECUTE stmt;
 
1320
i
 
1321
EXECUTE stmt;
 
1322
i
 
1323
DEALLOCATE PREPARE stmt;
 
1324
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1325
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1326
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1327
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1328
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1329
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1330
SELECT * FROM t1 WHERE (t1.i) IN 
 
1331
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1332
i
 
1333
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1334
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1335
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1336
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1337
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
1338
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1339
SELECT * FROM t1 WHERE (t1.i) IN 
 
1340
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1341
i
 
1342
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1343
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1344
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1345
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1346
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1347
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1348
SELECT * FROM t1 WHERE (11) IN 
 
1349
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1350
i
 
1351
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1352
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1353
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1354
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1355
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1356
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1357
SELECT * FROM t1 WHERE (11) IN 
 
1358
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1359
i
 
1360
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1361
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1362
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1363
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1364
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1365
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1366
SELECT * FROM t1 WHERE (11) IN 
 
1367
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1368
i
 
1369
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1370
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1371
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1372
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1373
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
1374
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1375
SELECT * FROM t1 WHERE (11) IN 
 
1376
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1377
i
 
1378
INSERT INTO t3 VALUES (2);
 
1379
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1380
(SELECT COUNT(*) from t2) AS c2,
 
1381
(SELECT COUNT(*) from t3) AS c3;
 
1382
c1      c2      c3
 
1383
1       1       1
 
1384
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1385
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1386
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1387
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1388
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1389
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1390
SELECT * FROM t1 WHERE (t1.i) IN 
 
1391
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1392
i
 
1393
2
 
1394
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1395
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1396
EXECUTE stmt;
 
1397
i
 
1398
2
 
1399
EXECUTE stmt;
 
1400
i
 
1401
2
 
1402
DEALLOCATE PREPARE stmt;
 
1403
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1404
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1405
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1406
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1407
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1408
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1409
SELECT * FROM t1 WHERE (t1.i) IN 
 
1410
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1411
i
 
1412
2
 
1413
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1414
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1415
EXECUTE stmt;
 
1416
i
 
1417
2
 
1418
EXECUTE stmt;
 
1419
i
 
1420
2
 
1421
DEALLOCATE PREPARE stmt;
 
1422
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1423
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1424
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1425
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1426
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1427
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1428
SELECT * FROM t1 WHERE (t1.i) IN 
 
1429
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1430
i
 
1431
2
 
1432
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1433
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1434
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1435
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1436
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
1437
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1438
SELECT * FROM t1 WHERE (t1.i) IN 
 
1439
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1440
i
 
1441
2
 
1442
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1443
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1444
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1445
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1446
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1447
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1448
SELECT * FROM t1 WHERE (11) IN 
 
1449
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1450
i
 
1451
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1452
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1453
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1454
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1455
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1456
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1457
SELECT * FROM t1 WHERE (11) IN 
 
1458
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1459
i
 
1460
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1461
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1462
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1463
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1464
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1465
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1466
SELECT * FROM t1 WHERE (11) IN 
 
1467
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1468
i
 
1469
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1470
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1471
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1472
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1473
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
1474
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1475
SELECT * FROM t1 WHERE (11) IN 
 
1476
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1477
i
 
1478
INSERT INTO t3 VALUES (1);
 
1479
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1480
(SELECT COUNT(*) from t2) AS c2,
 
1481
(SELECT COUNT(*) from t3) AS c3;
 
1482
c1      c2      c3
 
1483
1       1       2
 
1484
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1485
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1486
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1487
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1488
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1489
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1490
SELECT * FROM t1 WHERE (t1.i) IN 
 
1491
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1492
i
 
1493
2
 
1494
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1495
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1496
EXECUTE stmt;
 
1497
i
 
1498
2
 
1499
EXECUTE stmt;
 
1500
i
 
1501
2
 
1502
DEALLOCATE PREPARE stmt;
 
1503
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1504
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1505
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1506
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1507
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1508
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1509
SELECT * FROM t1 WHERE (t1.i) IN 
 
1510
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1511
i
 
1512
2
 
1513
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1514
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1515
EXECUTE stmt;
 
1516
i
 
1517
2
 
1518
EXECUTE stmt;
 
1519
i
 
1520
2
 
1521
DEALLOCATE PREPARE stmt;
 
1522
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1523
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1524
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1525
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1526
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1527
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1528
SELECT * FROM t1 WHERE (t1.i) IN 
 
1529
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1530
i
 
1531
2
 
1532
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1533
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1534
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1535
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1536
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
1537
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1538
SELECT * FROM t1 WHERE (t1.i) IN 
 
1539
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1540
i
 
1541
2
 
1542
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1543
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1544
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1545
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1546
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1547
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1548
SELECT * FROM t1 WHERE (11) IN 
 
1549
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1550
i
 
1551
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1552
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1553
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1554
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1555
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1556
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1557
SELECT * FROM t1 WHERE (11) IN 
 
1558
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1559
i
 
1560
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1561
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1562
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1563
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1564
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1565
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1566
SELECT * FROM t1 WHERE (11) IN 
 
1567
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1568
i
 
1569
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1570
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1571
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1572
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1573
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
1574
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1575
SELECT * FROM t1 WHERE (11) IN 
 
1576
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1577
i
 
1578
INSERT INTO t3 VALUES (0);
 
1579
DELETE FROM t3;
 
1580
INSERT INTO t2 VALUES (1);
 
1581
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1582
(SELECT COUNT(*) from t2) AS c2,
 
1583
(SELECT COUNT(*) from t3) AS c3;
 
1584
c1      c2      c3
 
1585
1       2       0
 
1586
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1587
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1588
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1589
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1590
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1591
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1592
SELECT * FROM t1 WHERE (t1.i) IN 
 
1593
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1594
i
 
1595
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1596
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1597
EXECUTE stmt;
 
1598
i
 
1599
EXECUTE stmt;
 
1600
i
 
1601
DEALLOCATE PREPARE stmt;
 
1602
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1603
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1604
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1605
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1606
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1607
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1608
SELECT * FROM t1 WHERE (t1.i) IN 
 
1609
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1610
i
 
1611
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1612
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1613
EXECUTE stmt;
 
1614
i
 
1615
EXECUTE stmt;
 
1616
i
 
1617
DEALLOCATE PREPARE stmt;
 
1618
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1619
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1620
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1621
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1622
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1623
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1624
SELECT * FROM t1 WHERE (t1.i) IN 
 
1625
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1626
i
 
1627
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1628
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1629
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1630
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1631
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
1632
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1633
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1634
SELECT * FROM t1 WHERE (t1.i) IN 
 
1635
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1636
i
 
1637
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1638
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1639
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1640
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1641
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1642
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1643
SELECT * FROM t1 WHERE (11) IN 
 
1644
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1645
i
 
1646
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1647
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1648
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1649
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1650
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1651
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1652
SELECT * FROM t1 WHERE (11) IN 
 
1653
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1654
i
 
1655
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1656
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1657
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1658
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1659
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1660
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1661
SELECT * FROM t1 WHERE (11) IN 
 
1662
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1663
i
 
1664
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1665
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1666
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1667
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1668
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
1669
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1670
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1671
SELECT * FROM t1 WHERE (11) IN 
 
1672
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1673
i
 
1674
INSERT INTO t3 VALUES (2);
 
1675
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1676
(SELECT COUNT(*) from t2) AS c2,
 
1677
(SELECT COUNT(*) from t3) AS c3;
 
1678
c1      c2      c3
 
1679
1       2       1
 
1680
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1681
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1682
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1683
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1684
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1685
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1686
SELECT * FROM t1 WHERE (t1.i) IN 
 
1687
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1688
i
 
1689
2
 
1690
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1691
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1692
EXECUTE stmt;
 
1693
i
 
1694
2
 
1695
EXECUTE stmt;
 
1696
i
 
1697
2
 
1698
DEALLOCATE PREPARE stmt;
 
1699
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1700
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1701
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1702
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1703
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1704
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1705
SELECT * FROM t1 WHERE (t1.i) IN 
 
1706
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1707
i
 
1708
2
 
1709
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1710
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1711
EXECUTE stmt;
 
1712
i
 
1713
2
 
1714
EXECUTE stmt;
 
1715
i
 
1716
2
 
1717
DEALLOCATE PREPARE stmt;
 
1718
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1719
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1720
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1721
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1722
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1723
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1724
SELECT * FROM t1 WHERE (t1.i) IN 
 
1725
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1726
i
 
1727
2
 
1728
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1729
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1730
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1731
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1732
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1733
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1734
SELECT * FROM t1 WHERE (t1.i) IN 
 
1735
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1736
i
 
1737
2
 
1738
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1739
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1740
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1741
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1742
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1743
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1744
SELECT * FROM t1 WHERE (11) IN 
 
1745
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1746
i
 
1747
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1748
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1749
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1750
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1751
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1752
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1753
SELECT * FROM t1 WHERE (11) IN 
 
1754
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1755
i
 
1756
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1757
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1758
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1759
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1760
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1761
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1762
SELECT * FROM t1 WHERE (11) IN 
 
1763
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1764
i
 
1765
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1766
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1767
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1768
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1769
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1770
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
1771
SELECT * FROM t1 WHERE (11) IN 
 
1772
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1773
i
 
1774
INSERT INTO t3 VALUES (1);
 
1775
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1776
(SELECT COUNT(*) from t2) AS c2,
 
1777
(SELECT COUNT(*) from t3) AS c3;
 
1778
c1      c2      c3
 
1779
1       2       2
 
1780
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1781
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1782
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1783
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1784
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1785
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1786
SELECT * FROM t1 WHERE (t1.i) IN 
 
1787
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1788
i
 
1789
2
 
1790
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1791
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1792
EXECUTE stmt;
 
1793
i
 
1794
2
 
1795
EXECUTE stmt;
 
1796
i
 
1797
2
 
1798
DEALLOCATE PREPARE stmt;
 
1799
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1800
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1801
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1802
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1803
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1804
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1805
SELECT * FROM t1 WHERE (t1.i) IN 
 
1806
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1807
i
 
1808
2
 
1809
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1810
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1811
EXECUTE stmt;
 
1812
i
 
1813
2
 
1814
EXECUTE stmt;
 
1815
i
 
1816
2
 
1817
DEALLOCATE PREPARE stmt;
 
1818
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1819
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1820
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1821
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1822
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1823
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1824
SELECT * FROM t1 WHERE (t1.i) IN 
 
1825
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1826
i
 
1827
2
 
1828
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1829
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1830
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1831
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1832
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1833
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1834
SELECT * FROM t1 WHERE (t1.i) IN 
 
1835
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1836
i
 
1837
2
 
1838
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1839
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1840
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1841
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1842
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1843
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1844
SELECT * FROM t1 WHERE (11) IN 
 
1845
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1846
i
 
1847
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1848
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1849
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1850
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1851
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1852
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1853
SELECT * FROM t1 WHERE (11) IN 
 
1854
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1855
i
 
1856
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1857
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1858
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1859
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1860
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1861
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1862
SELECT * FROM t1 WHERE (11) IN 
 
1863
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1864
i
 
1865
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1866
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1867
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1868
1       SIMPLE  t1      system  NULL    NULL    NULL    NULL    1       NULL
 
1869
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1870
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
1871
SELECT * FROM t1 WHERE (11) IN 
 
1872
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1873
i
 
1874
INSERT INTO t3 VALUES (0);
 
1875
DELETE FROM t3;
 
1876
INSERT INTO t2 VALUES (0);
 
1877
DELETE FROM t2;
 
1878
INSERT INTO t1 VALUES (1);
 
1879
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1880
(SELECT COUNT(*) from t2) AS c2,
 
1881
(SELECT COUNT(*) from t3) AS c3;
 
1882
c1      c2      c3
 
1883
2       0       0
 
1884
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1885
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1886
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1887
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
1888
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1889
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1890
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1891
SELECT * FROM t1 WHERE (t1.i) IN 
 
1892
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1893
i
 
1894
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1895
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1896
EXECUTE stmt;
 
1897
i
 
1898
EXECUTE stmt;
 
1899
i
 
1900
DEALLOCATE PREPARE stmt;
 
1901
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1902
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1903
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1904
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
1905
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1906
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1907
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1908
SELECT * FROM t1 WHERE (t1.i) IN 
 
1909
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1910
i
 
1911
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1912
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
1913
EXECUTE stmt;
 
1914
i
 
1915
EXECUTE stmt;
 
1916
i
 
1917
DEALLOCATE PREPARE stmt;
 
1918
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1919
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1920
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1921
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
1922
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1923
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1924
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1925
SELECT * FROM t1 WHERE (t1.i) IN 
 
1926
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1927
i
 
1928
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1929
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1930
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1931
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
1932
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1933
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1934
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
1935
SELECT * FROM t1 WHERE (t1.i) IN 
 
1936
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1937
i
 
1938
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1939
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1940
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1941
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
1942
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1943
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1944
SELECT * FROM t1 WHERE (11) IN 
 
1945
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1946
i
 
1947
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1948
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1949
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1950
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; Start temporary
 
1951
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
1952
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
1953
SELECT * FROM t1 WHERE (11) IN 
 
1954
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
1955
i
 
1956
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1957
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1958
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1959
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
1960
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1961
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1962
SELECT * FROM t1 WHERE (11) IN 
 
1963
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
1964
i
 
1965
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
1966
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1967
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1968
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       FirstMatch
 
1969
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
1970
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch(t1)
 
1971
SELECT * FROM t1 WHERE (11) IN 
 
1972
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
1973
i
 
1974
INSERT INTO t3 VALUES (2);
 
1975
SELECT (SELECT COUNT(*) from t1) AS c1,
 
1976
(SELECT COUNT(*) from t2) AS c2,
 
1977
(SELECT COUNT(*) from t3) AS c3;
 
1978
c1      c2      c3
 
1979
2       0       1
 
1980
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1981
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1982
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1983
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
1984
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
1985
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
1986
SELECT * FROM t1 WHERE (t1.i) IN 
 
1987
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
1988
i
 
1989
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
1990
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
1991
EXECUTE stmt;
 
1992
i
 
1993
EXECUTE stmt;
 
1994
i
 
1995
DEALLOCATE PREPARE stmt;
 
1996
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
1997
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
1998
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
1999
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2000
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2001
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2002
SELECT * FROM t1 WHERE (t1.i) IN 
 
2003
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2004
i
 
2005
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2006
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2007
EXECUTE stmt;
 
2008
i
 
2009
EXECUTE stmt;
 
2010
i
 
2011
DEALLOCATE PREPARE stmt;
 
2012
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2013
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2014
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2015
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
2016
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
2017
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2018
SELECT * FROM t1 WHERE (t1.i) IN 
 
2019
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2020
i
 
2021
2
 
2022
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2023
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2024
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2025
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2026
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2027
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2028
SELECT * FROM t1 WHERE (t1.i) IN 
 
2029
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2030
i
 
2031
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2032
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2033
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2034
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2035
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2036
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
2037
SELECT * FROM t1 WHERE (11) IN 
 
2038
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2039
i
 
2040
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2041
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2042
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2043
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; Start temporary
 
2044
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2045
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2046
SELECT * FROM t1 WHERE (11) IN 
 
2047
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2048
i
 
2049
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2050
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2051
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2052
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2053
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2054
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2055
SELECT * FROM t1 WHERE (11) IN 
 
2056
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2057
i
 
2058
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2059
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2060
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2061
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       FirstMatch
 
2062
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2063
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
2064
SELECT * FROM t1 WHERE (11) IN 
 
2065
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2066
i
 
2067
INSERT INTO t3 VALUES (1);
 
2068
SELECT (SELECT COUNT(*) from t1) AS c1,
 
2069
(SELECT COUNT(*) from t2) AS c2,
 
2070
(SELECT COUNT(*) from t3) AS c3;
 
2071
c1      c2      c3
 
2072
2       0       2
 
2073
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2074
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2075
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2076
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2077
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2078
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2079
SELECT * FROM t1 WHERE (t1.i) IN 
 
2080
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2081
i
 
2082
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2083
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
2084
EXECUTE stmt;
 
2085
i
 
2086
EXECUTE stmt;
 
2087
i
 
2088
DEALLOCATE PREPARE stmt;
 
2089
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2090
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2091
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2092
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2093
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2094
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2095
SELECT * FROM t1 WHERE (t1.i) IN 
 
2096
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2097
i
 
2098
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2099
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2100
EXECUTE stmt;
 
2101
i
 
2102
EXECUTE stmt;
 
2103
i
 
2104
DEALLOCATE PREPARE stmt;
 
2105
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2106
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2107
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2108
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Start temporary
 
2109
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
2110
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2111
SELECT * FROM t1 WHERE (t1.i) IN 
 
2112
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2113
i
 
2114
2
 
2115
1
 
2116
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2117
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2118
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2119
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2120
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2121
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2122
SELECT * FROM t1 WHERE (t1.i) IN 
 
2123
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2124
i
 
2125
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2126
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2127
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2128
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2129
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2130
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
2131
SELECT * FROM t1 WHERE (11) IN 
 
2132
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2133
i
 
2134
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2135
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2136
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2137
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       Using where; Start temporary
 
2138
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2139
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2140
SELECT * FROM t1 WHERE (11) IN 
 
2141
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2142
i
 
2143
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2144
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2145
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2146
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
2147
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2148
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2149
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    0       Using where
 
2150
SELECT * FROM t1 WHERE (11) IN 
 
2151
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2152
i
 
2153
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2154
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2155
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2156
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    0       FirstMatch
 
2157
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2158
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
2159
SELECT * FROM t1 WHERE (11) IN 
 
2160
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2161
i
 
2162
INSERT INTO t3 VALUES (0);
 
2163
DELETE FROM t3;
 
2164
INSERT INTO t2 VALUES (2);
 
2165
SELECT (SELECT COUNT(*) from t1) AS c1,
 
2166
(SELECT COUNT(*) from t2) AS c2,
 
2167
(SELECT COUNT(*) from t3) AS c3;
 
2168
c1      c2      c3
 
2169
2       1       0
 
2170
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2171
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2172
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2173
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2174
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2175
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
2176
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2177
SELECT * FROM t1 WHERE (t1.i) IN 
 
2178
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2179
i
 
2180
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2181
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
2182
EXECUTE stmt;
 
2183
i
 
2184
EXECUTE stmt;
 
2185
i
 
2186
DEALLOCATE PREPARE stmt;
 
2187
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2188
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2189
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2190
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2191
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2192
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
2193
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2194
SELECT * FROM t1 WHERE (t1.i) IN 
 
2195
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2196
i
 
2197
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2198
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2199
EXECUTE stmt;
 
2200
i
 
2201
EXECUTE stmt;
 
2202
i
 
2203
DEALLOCATE PREPARE stmt;
 
2204
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2205
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2206
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2207
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2208
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2209
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
2210
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2211
SELECT * FROM t1 WHERE (t1.i) IN 
 
2212
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2213
i
 
2214
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2215
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2216
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2217
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2218
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2219
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2220
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
2221
SELECT * FROM t1 WHERE (t1.i) IN 
 
2222
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2223
i
 
2224
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2225
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2226
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2227
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2228
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2229
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
2230
SELECT * FROM t1 WHERE (11) IN 
 
2231
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2232
i
 
2233
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2234
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2235
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2236
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; Start temporary
 
2237
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2238
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2239
SELECT * FROM t1 WHERE (11) IN 
 
2240
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2241
i
 
2242
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2243
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2244
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2245
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2246
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2247
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t1)
 
2248
SELECT * FROM t1 WHERE (11) IN 
 
2249
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2250
i
 
2251
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2252
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2253
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2254
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2255
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2256
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2257
SELECT * FROM t1 WHERE (11) IN 
 
2258
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2259
i
 
2260
INSERT INTO t3 VALUES (2);
 
2261
SELECT (SELECT COUNT(*) from t1) AS c1,
 
2262
(SELECT COUNT(*) from t2) AS c2,
 
2263
(SELECT COUNT(*) from t3) AS c3;
 
2264
c1      c2      c3
 
2265
2       1       1
 
2266
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2267
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2268
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2269
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2270
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2271
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2272
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2273
SELECT * FROM t1 WHERE (t1.i) IN 
 
2274
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2275
i
 
2276
2
 
2277
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2278
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
2279
EXECUTE stmt;
 
2280
i
 
2281
2
 
2282
EXECUTE stmt;
 
2283
i
 
2284
2
 
2285
DEALLOCATE PREPARE stmt;
 
2286
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2287
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2288
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2289
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2290
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2291
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2292
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2293
SELECT * FROM t1 WHERE (t1.i) IN 
 
2294
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2295
i
 
2296
2
 
2297
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2298
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2299
EXECUTE stmt;
 
2300
i
 
2301
2
 
2302
EXECUTE stmt;
 
2303
i
 
2304
2
 
2305
DEALLOCATE PREPARE stmt;
 
2306
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2307
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2308
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2309
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2310
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2311
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2312
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2313
SELECT * FROM t1 WHERE (t1.i) IN 
 
2314
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2315
i
 
2316
2
 
2317
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2318
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2319
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2320
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2321
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2322
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2323
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2324
SELECT * FROM t1 WHERE (t1.i) IN 
 
2325
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2326
i
 
2327
2
 
2328
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2329
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2330
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2331
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2332
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch
 
2333
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2334
SELECT * FROM t1 WHERE (11) IN 
 
2335
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2336
i
 
2337
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2338
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2339
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2340
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; Start temporary
 
2341
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2342
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2343
SELECT * FROM t1 WHERE (11) IN 
 
2344
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2345
i
 
2346
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2347
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2348
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2349
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2350
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch
 
2351
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2352
SELECT * FROM t1 WHERE (11) IN 
 
2353
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2354
i
 
2355
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2356
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2357
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2358
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2359
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch
 
2360
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2361
SELECT * FROM t1 WHERE (11) IN 
 
2362
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2363
i
 
2364
INSERT INTO t3 VALUES (1);
 
2365
SELECT (SELECT COUNT(*) from t1) AS c1,
 
2366
(SELECT COUNT(*) from t2) AS c2,
 
2367
(SELECT COUNT(*) from t3) AS c3;
 
2368
c1      c2      c3
 
2369
2       1       2
 
2370
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2371
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2372
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2373
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
2374
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2375
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2376
SELECT * FROM t1 WHERE (t1.i) IN 
 
2377
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2378
i
 
2379
2
 
2380
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2381
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
2382
EXECUTE stmt;
 
2383
i
 
2384
2
 
2385
EXECUTE stmt;
 
2386
i
 
2387
2
 
2388
DEALLOCATE PREPARE stmt;
 
2389
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2390
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2391
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2392
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
2393
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2394
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2395
SELECT * FROM t1 WHERE (t1.i) IN 
 
2396
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2397
i
 
2398
2
 
2399
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2400
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2401
EXECUTE stmt;
 
2402
i
 
2403
2
 
2404
EXECUTE stmt;
 
2405
i
 
2406
2
 
2407
DEALLOCATE PREPARE stmt;
 
2408
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2409
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2410
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2411
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2412
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2413
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2414
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2415
SELECT * FROM t1 WHERE (t1.i) IN 
 
2416
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2417
i
 
2418
2
 
2419
1
 
2420
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2421
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2422
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2423
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
2424
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2425
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2426
SELECT * FROM t1 WHERE (t1.i) IN 
 
2427
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2428
i
 
2429
2
 
2430
1
 
2431
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2432
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2433
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2434
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2435
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch
 
2436
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2437
SELECT * FROM t1 WHERE (11) IN 
 
2438
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2439
i
 
2440
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2441
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2442
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2443
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; Start temporary
 
2444
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2445
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2446
SELECT * FROM t1 WHERE (11) IN 
 
2447
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2448
i
 
2449
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2450
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2451
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2452
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2453
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch
 
2454
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2455
SELECT * FROM t1 WHERE (11) IN 
 
2456
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2457
i
 
2458
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2459
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2460
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2461
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2462
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch
 
2463
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2464
SELECT * FROM t1 WHERE (11) IN 
 
2465
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2466
i
 
2467
INSERT INTO t3 VALUES (0);
 
2468
DELETE FROM t3;
 
2469
INSERT INTO t2 VALUES (1);
 
2470
SELECT (SELECT COUNT(*) from t1) AS c1,
 
2471
(SELECT COUNT(*) from t2) AS c2,
 
2472
(SELECT COUNT(*) from t3) AS c3;
 
2473
c1      c2      c3
 
2474
2       2       0
 
2475
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2476
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2477
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2478
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2479
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2480
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2481
SELECT * FROM t1 WHERE (t1.i) IN 
 
2482
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2483
i
 
2484
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2485
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
2486
EXECUTE stmt;
 
2487
i
 
2488
EXECUTE stmt;
 
2489
i
 
2490
DEALLOCATE PREPARE stmt;
 
2491
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2492
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2493
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2494
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2495
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2496
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2497
SELECT * FROM t1 WHERE (t1.i) IN 
 
2498
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2499
i
 
2500
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2501
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2502
EXECUTE stmt;
 
2503
i
 
2504
EXECUTE stmt;
 
2505
i
 
2506
DEALLOCATE PREPARE stmt;
 
2507
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2508
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2509
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2510
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Start temporary
 
2511
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2512
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2513
SELECT * FROM t1 WHERE (t1.i) IN 
 
2514
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2515
i
 
2516
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2517
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2518
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2519
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2520
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2521
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2522
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
2523
SELECT * FROM t1 WHERE (t1.i) IN 
 
2524
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2525
i
 
2526
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2527
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2528
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2529
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2530
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2531
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
2532
SELECT * FROM t1 WHERE (11) IN 
 
2533
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2534
i
 
2535
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2536
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2537
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2538
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; Start temporary
 
2539
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2540
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2541
SELECT * FROM t1 WHERE (11) IN 
 
2542
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2543
i
 
2544
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2545
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2546
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2547
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    0       Using where; FirstMatch
 
2548
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2549
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
2550
SELECT * FROM t1 WHERE (11) IN 
 
2551
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2552
i
 
2553
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2554
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2555
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2556
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
2557
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2558
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2559
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       Using where
 
2560
SELECT * FROM t1 WHERE (11) IN 
 
2561
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2562
i
 
2563
INSERT INTO t3 VALUES (2);
 
2564
SELECT (SELECT COUNT(*) from t1) AS c1,
 
2565
(SELECT COUNT(*) from t2) AS c2,
 
2566
(SELECT COUNT(*) from t3) AS c3;
 
2567
c1      c2      c3
 
2568
2       2       1
 
2569
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2570
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2571
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2572
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
2573
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2574
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2575
SELECT * FROM t1 WHERE (t1.i) IN 
 
2576
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2577
i
 
2578
2
 
2579
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2580
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
2581
EXECUTE stmt;
 
2582
i
 
2583
2
 
2584
EXECUTE stmt;
 
2585
i
 
2586
2
 
2587
DEALLOCATE PREPARE stmt;
 
2588
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2589
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2590
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2591
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
2592
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2593
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2594
SELECT * FROM t1 WHERE (t1.i) IN 
 
2595
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2596
i
 
2597
2
 
2598
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2599
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2600
EXECUTE stmt;
 
2601
i
 
2602
2
 
2603
EXECUTE stmt;
 
2604
i
 
2605
2
 
2606
DEALLOCATE PREPARE stmt;
 
2607
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2608
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2609
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2610
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
2611
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2612
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2613
SELECT * FROM t1 WHERE (t1.i) IN 
 
2614
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2615
i
 
2616
2
 
2617
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2618
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2619
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2620
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
2621
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2622
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2623
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    1       NULL
 
2624
SELECT * FROM t1 WHERE (t1.i) IN 
 
2625
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2626
i
 
2627
2
 
2628
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2629
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2630
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2631
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2632
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch
 
2633
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2634
SELECT * FROM t1 WHERE (11) IN 
 
2635
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2636
i
 
2637
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2638
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2639
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2640
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; Start temporary
 
2641
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2642
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; End temporary
 
2643
SELECT * FROM t1 WHERE (11) IN 
 
2644
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2645
i
 
2646
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2647
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2648
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2649
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
2650
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch
 
2651
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2652
SELECT * FROM t1 WHERE (11) IN 
 
2653
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2654
i
 
2655
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2656
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2657
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2658
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2659
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch
 
2660
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2661
SELECT * FROM t1 WHERE (11) IN 
 
2662
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2663
i
 
2664
INSERT INTO t3 VALUES (1);
 
2665
SELECT (SELECT COUNT(*) from t1) AS c1,
 
2666
(SELECT COUNT(*) from t2) AS c2,
 
2667
(SELECT COUNT(*) from t3) AS c3;
 
2668
c1      c2      c3
 
2669
2       2       2
 
2670
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2671
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2672
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2673
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2674
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t1.i       1       NULL
 
2675
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2676
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2677
SELECT * FROM t1 WHERE (t1.i) IN 
 
2678
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i);
 
2679
i
 
2680
2
 
2681
1
 
2682
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2683
(SELECT t3.i FROM t2 INNER JOIN t3 ON t2.i=t3.i)";
 
2684
EXECUTE stmt;
 
2685
i
 
2686
2
 
2687
1
 
2688
EXECUTE stmt;
 
2689
i
 
2690
2
 
2691
1
 
2692
DEALLOCATE PREPARE stmt;
 
2693
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2694
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2695
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2696
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2697
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t1.i       1       NULL
 
2698
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2699
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2700
SELECT * FROM t1 WHERE (t1.i) IN 
 
2701
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2702
i
 
2703
2
 
2704
1
 
2705
PREPARE stmt FROM "SELECT * FROM t1 WHERE (t1.i) IN 
 
2706
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i)";
 
2707
EXECUTE stmt;
 
2708
i
 
2709
2
 
2710
1
 
2711
EXECUTE stmt;
 
2712
i
 
2713
2
 
2714
1
 
2715
DEALLOCATE PREPARE stmt;
 
2716
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2717
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2718
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2719
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2720
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t1.i       1       NULL
 
2721
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2722
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2723
SELECT * FROM t1 WHERE (t1.i) IN 
 
2724
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2725
i
 
2726
2
 
2727
1
 
2728
EXPLAIN SELECT * FROM t1 WHERE (t1.i) IN 
 
2729
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2730
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2731
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2732
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t1.i       1       NULL
 
2733
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2734
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2735
SELECT * FROM t1 WHERE (t1.i) IN 
 
2736
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2737
i
 
2738
2
 
2739
1
 
2740
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2741
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2742
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2743
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2744
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
2745
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2746
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2747
SELECT * FROM t1 WHERE (11) IN 
 
2748
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
2749
i
 
2750
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2751
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2752
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2753
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2754
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2755
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
2756
SELECT * FROM t1 WHERE (11) IN 
 
2757
(SELECT t3.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i WHERE t1.i);
 
2758
i
 
2759
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2760
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2761
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2762
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2763
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
2764
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2765
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2766
SELECT * FROM t1 WHERE (11) IN 
 
2767
(SELECT t3.i FROM t2 RIGHT JOIN t3 ON t2.i=t3.i);
 
2768
i
 
2769
EXPLAIN SELECT * FROM t1 WHERE (11) IN 
 
2770
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2771
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2772
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2773
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      5       const   1       NULL
 
2774
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
2775
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
2776
SELECT * FROM t1 WHERE (11) IN 
 
2777
(SELECT t3.i FROM t2 STRAIGHT_JOIN t3);
 
2778
i
 
2779
INSERT INTO t3 VALUES (0);
 
2780
DELETE FROM t3;
 
2781
INSERT INTO t2 VALUES (0);
 
2782
DELETE FROM t2;
 
2783
INSERT INTO t1 VALUES (0);
 
2784
DROP TABLE t1, t2, t3;
 
2785
create table x1(k int primary key, d1 int, d2 int);
 
2786
create table x2(k int primary key, d1 int, d2 int);
 
2787
insert into x1 values
 
2788
(10,   10,   10),
 
2789
(20,   20,   20),
 
2790
(21,   20,   null),
 
2791
(30,   null, 30),
 
2792
(40,   40,   40);
 
2793
insert into x2 values
 
2794
(10,   10,   10),
 
2795
(20,   20,   20),
 
2796
(21,   20,   null),
 
2797
(30,   null, 30);
 
2798
select *
 
2799
from x1
 
2800
where (d1, d2) in (select d1, d2
 
2801
from x2);
 
2802
k       d1      d2
 
2803
10      10      10
 
2804
20      20      20
 
2805
select *
 
2806
from x1
 
2807
where (d1, d2) in (select d1, d2
 
2808
from x2) is true;
 
2809
k       d1      d2
 
2810
10      10      10
 
2811
20      20      20
 
2812
select *
 
2813
from x1
 
2814
where (d1, d2) in (select d1, d2
 
2815
from x2) is false;
 
2816
k       d1      d2
 
2817
40      40      40
 
2818
select *
 
2819
from x1
 
2820
where (d1, d2) in (select d1, d2
 
2821
from x2) is unknown;
 
2822
k       d1      d2
 
2823
21      20      NULL
 
2824
30      NULL    30
 
2825
select *
 
2826
from x1
 
2827
where d1 in (select d1
 
2828
from x2
 
2829
where x1.d2=x2.d2);
 
2830
k       d1      d2
 
2831
10      10      10
 
2832
20      20      20
 
2833
select *
 
2834
from x1
 
2835
where d1 in (select d1
 
2836
from x2
 
2837
where x1.d2=x2.d2) is true;
 
2838
k       d1      d2
 
2839
10      10      10
 
2840
20      20      20
 
2841
select *
 
2842
from x1
 
2843
where d1 in (select d1
 
2844
from x2
 
2845
where x1.d2=x2.d2) is false;
 
2846
k       d1      d2
 
2847
21      20      NULL
 
2848
40      40      40
 
2849
select *
 
2850
from x1
 
2851
where d1 in (select d1
 
2852
from x2
 
2853
where x1.d2=x2.d2) is unknown;
 
2854
k       d1      d2
 
2855
30      NULL    30
 
2856
select *
 
2857
from x1
 
2858
where 1 in (select 1
 
2859
from x2
 
2860
where x1.d1=x2.d1 and x1.d2=x2.d2);
 
2861
k       d1      d2
 
2862
10      10      10
 
2863
20      20      20
 
2864
select *
 
2865
from x1
 
2866
where 1 in (select 1
 
2867
from x2
 
2868
where x1.d1=x2.d1 and x1.d2=x2.d2) is true;
 
2869
k       d1      d2
 
2870
10      10      10
 
2871
20      20      20
 
2872
select *
 
2873
from x1
 
2874
where 1 in (select 1
 
2875
from x2
 
2876
where x1.d1=x2.d1 and x1.d2=x2.d2) is false;
 
2877
k       d1      d2
 
2878
21      20      NULL
 
2879
30      NULL    30
 
2880
40      40      40
 
2881
select *
 
2882
from x1
 
2883
where 1 in (select 1
 
2884
from x2
 
2885
where x1.d1=x2.d1 and x1.d2=x2.d2) is unknown;
 
2886
k       d1      d2
 
2887
select *
 
2888
from x1
 
2889
where exists (select *
 
2890
from x2
 
2891
where x1.d1=x2.d1 and x1.d2=x2.d2);
 
2892
k       d1      d2
 
2893
10      10      10
 
2894
20      20      20
 
2895
drop table x1;
 
2896
drop table x2;
 
2897
CREATE TABLE t1 (
 
2898
a int(11) NOT NULL,
 
2899
b int(11) NOT NULL,
 
2900
c datetime default NULL,
 
2901
PRIMARY KEY  (a),
 
2902
KEY idx_bc (b,c)
 
2903
);
 
2904
INSERT INTO t1 VALUES 
 
2905
(406989,67,'2006-02-23 17:08:46'), (150078,67,'2005-10-26 11:17:45'),
 
2906
(406993,67,'2006-02-27 11:20:57'), (245655,67,'2005-12-08 15:59:08'),
 
2907
(406994,67,'2006-02-27 11:26:46'), (256,67,NULL),
 
2908
(398341,67,'2006-02-20 04:48:44'), (254,67,NULL),(1120,67,NULL),
 
2909
(406988,67,'2006-02-23 17:07:22'), (255,67,NULL),
 
2910
(398340,67,'2006-02-20 04:38:53'),(406631,67,'2006-02-23 10:49:42'),
 
2911
(245653,67,'2005-12-08 15:59:07'),(406992,67,'2006-02-24 16:47:18'),
 
2912
(245654,67,'2005-12-08 15:59:08'),(406995,67,'2006-02-28 11:55:00'),
 
2913
(127261,67,'2005-10-13 12:17:58'),(406991,67,'2006-02-24 16:42:32'),
 
2914
(245652,67,'2005-12-08 15:58:27'),(398545,67,'2006-02-20 04:53:13'),
 
2915
(154504,67,'2005-10-28 11:53:01'),(9199,67,NULL),(1,67,'2006-02-23 15:01:35'),
 
2916
(223456,67,NULL),(4101,67,NULL),(1133,67,NULL),
 
2917
(406990,67,'2006-02-23 18:01:45'),(148815,67,'2005-10-25 15:34:17'),
 
2918
(148812,67,'2005-10-25 15:30:01'),(245651,67,'2005-12-08 15:58:27'),
 
2919
(154503,67,'2005-10-28 11:52:38');
 
2920
create table t11 select * from t1 where b = 67 AND (c IS NULL OR c > NOW()) order by 3 asc;
 
2921
create table t12 select * from t1 where b = 67 AND (c IS NULL OR c > NOW()) order by 3 desc;
 
2922
create table t21 select * from t1 where b = 67 AND (c IS NULL OR c > '2005-12-08') order by 3 asc;
 
2923
create table t22 select * from t1 where b = 67 AND (c IS NULL OR c > '2005-12-08') order by 3 desc;
 
2924
update t22 set c = '2005-12-08 15:58:27' where a = 255;
 
2925
explain select t21.* from t21,t22 where t21.a = t22.a and 
 
2926
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;
 
2927
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2928
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using temporary; Using filesort
 
2929
1       SIMPLE  t22     ALL     NULL    NULL    NULL    NULL    26      Using where
 
2930
1       SIMPLE  t21     ALL     NULL    NULL    NULL    NULL    26      Using where
 
2931
2       MATERIALIZED    t11     ALL     NULL    NULL    NULL    NULL    8       Using where
 
2932
2       MATERIALIZED    t12     ALL     NULL    NULL    NULL    NULL    8       Using where
 
2933
explain format=json select * from t1 where a in (select a from t11);
 
2934
EXPLAIN
 
2935
{
 
2936
  "query_block": {
 
2937
    "select_id": 1,
 
2938
    "duplicates_removal": {
 
2939
      "using_temporary_table": true,
 
2940
      "nested_loop": [
 
2941
        {
 
2942
          "table": {
 
2943
            "table_name": "t11",
 
2944
            "access_type": "ALL",
 
2945
            "rows": 8,
 
2946
            "filtered": 100
 
2947
          }
 
2948
        },
 
2949
        {
 
2950
          "table": {
 
2951
            "table_name": "t1",
 
2952
            "access_type": "eq_ref",
 
2953
            "possible_keys": [
 
2954
              "PRIMARY"
 
2955
            ],
 
2956
            "key": "PRIMARY",
 
2957
            "used_key_parts": [
 
2958
              "a"
 
2959
            ],
 
2960
            "key_length": "4",
 
2961
            "ref": [
 
2962
              "test.t11.a"
 
2963
            ],
 
2964
            "rows": 1,
 
2965
            "filtered": 100,
 
2966
            "using_join_buffer": "Batched Key Access"
 
2967
          }
 
2968
        }
 
2969
      ]
 
2970
    }
 
2971
  }
 
2972
}
 
2973
Warnings:
 
2974
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`)
 
2975
select t21.* from t21,t22 where t21.a = t22.a and 
 
2976
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;
 
2977
a       b       c
 
2978
256     67      NULL
 
2979
drop table t1, t11, t12, t21, t22;
 
2980
create table t1(a int);
 
2981
insert into t1 values (0),(1);
 
2982
explain 
 
2983
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;
 
2984
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
2985
1       PRIMARY X       ALL     NULL    NULL    NULL    NULL    2       NULL
 
2986
2       DEPENDENT SUBQUERY      Y       ALL     NULL    NULL    NULL    NULL    2       Using where
 
2987
2       DEPENDENT SUBQUERY      Z       ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(Y)
 
2988
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;
 
2989
subq
 
2990
NULL
 
2991
0
 
2992
drop table t1;
 
2993
create table t0 (a int);
 
2994
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
2995
create table t1 as select * from t0;
 
2996
insert into t1 select a+10 from t0;
 
2997
insert into t0 values(2);
 
2998
explain select * from t1 where 2 in (select a from t0);
 
2999
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3000
1       SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    11      Using where; FirstMatch
 
3001
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    20      NULL
 
3002
select * from t1 where 2 in (select a from t0);
 
3003
a
 
3004
0
 
3005
1
 
3006
2
 
3007
3
 
3008
4
 
3009
5
 
3010
6
 
3011
7
 
3012
8
 
3013
9
 
3014
10
 
3015
11
 
3016
12
 
3017
13
 
3018
14
 
3019
15
 
3020
16
 
3021
17
 
3022
18
 
3023
19
 
3024
explain select * from (select a from t0) x where a in (select a from t1);
 
3025
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3026
1       PRIMARY <derived2>      ALL     NULL    NULL    NULL    NULL    11      Using where
 
3027
1       PRIMARY <subquery3>     eq_ref  <auto_key>      <auto_key>      5       x.a     1       NULL
 
3028
3       MATERIALIZED    t1      ALL     NULL    NULL    NULL    NULL    20      NULL
 
3029
2       DERIVED t0      ALL     NULL    NULL    NULL    NULL    11      NULL
 
3030
explain format=json select * from (select a from t0) x where a in (select a from t1);
 
3031
EXPLAIN
 
3032
{
 
3033
  "query_block": {
 
3034
    "select_id": 3,
 
3035
    "nested_loop": [
 
3036
      {
 
3037
        "table": {
 
3038
          "table_name": "x",
 
3039
          "access_type": "ALL",
 
3040
          "rows": 11,
 
3041
          "filtered": 100,
 
3042
          "attached_condition": "(`x`.`a` is not null)",
 
3043
          "materialized_from_subquery": {
 
3044
            "using_temporary_table": true,
 
3045
            "dependent": false,
 
3046
            "cacheable": true,
 
3047
            "query_block": {
 
3048
              "select_id": 2,
 
3049
              "table": {
 
3050
                "table_name": "t0",
 
3051
                "access_type": "ALL",
 
3052
                "rows": 11,
 
3053
                "filtered": 100
 
3054
              }
 
3055
            }
 
3056
          }
 
3057
        }
 
3058
      },
 
3059
      {
 
3060
        "table": {
 
3061
          "table_name": "<subquery3>",
 
3062
          "access_type": "eq_ref",
 
3063
          "key": "<auto_key>",
 
3064
          "key_length": "5",
 
3065
          "ref": [
 
3066
            "x.a"
 
3067
          ],
 
3068
          "rows": 1,
 
3069
          "materialized_from_subquery": {
 
3070
            "using_temporary_table": true,
 
3071
            "query_block": {
 
3072
              "table": {
 
3073
                "table_name": "t1",
 
3074
                "access_type": "ALL",
 
3075
                "rows": 20,
 
3076
                "filtered": 100
 
3077
              }
 
3078
            }
 
3079
          }
 
3080
        }
 
3081
      }
 
3082
    ]
 
3083
  }
 
3084
}
 
3085
Warnings:
 
3086
Note    1003    /* select#1 */ select `x`.`a` AS `a` from (/* select#2 */ select `test`.`t0`.`a` AS `a` from `test`.`t0`) `x` semi join (`test`.`t1`) where (`<subquery3>`.`a` = `x`.`a`)
 
3087
drop table t0, t1;
 
3088
create table t0 (a int);
 
3089
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
3090
create table t1 (kp1 int, kp2 int, c int, filler char(100), key(kp1, kp2));
 
3091
insert into t1 select A.a+10*(B.a+10*C.a), 0, 0, 'filler' from t0 A, t0 B, t0 C;
 
3092
insert into t1 select * from t1 where kp1 < 20;
 
3093
create table t3 (a int);
 
3094
insert into t3 select A.a + 10*B.a from t0 A, t0 B;
 
3095
explain select * from t3 where a in (select kp1 from t1 where kp1<20);
 
3096
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3097
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    100     Using where
 
3098
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t3.a       1       NULL
 
3099
2       MATERIALIZED    t1      range   kp1     kp1     5       NULL    48      Using where; Using index
 
3100
select * from t3 where a in (select kp1 from t1 where kp1<20);
 
3101
a
 
3102
0
 
3103
10
 
3104
1
 
3105
11
 
3106
2
 
3107
12
 
3108
3
 
3109
13
 
3110
4
 
3111
14
 
3112
5
 
3113
15
 
3114
6
 
3115
16
 
3116
7
 
3117
17
 
3118
8
 
3119
18
 
3120
9
 
3121
19
 
3122
explain select * from t3 where a in (select kp1 from t1 where kp1<20) and a<20;
 
3123
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3124
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    100     Using where
 
3125
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t3.a       1       NULL
 
3126
2       MATERIALIZED    t1      range   kp1     kp1     5       NULL    48      Using where; Using index
 
3127
select * from t3 where a in (select kp1 from t1 where kp1<20) and a<20;
 
3128
a
 
3129
0
 
3130
10
 
3131
1
 
3132
11
 
3133
2
 
3134
12
 
3135
3
 
3136
13
 
3137
4
 
3138
14
 
3139
5
 
3140
15
 
3141
6
 
3142
16
 
3143
7
 
3144
17
 
3145
8
 
3146
18
 
3147
9
 
3148
19
 
3149
create table t4 (pk int primary key);
 
3150
insert into t4 select a from t3;
 
3151
explain select * from t3 where a in 
 
3152
(select t1.kp1 from t1,t4 where kp1<20 and t4.pk=t1.c);
 
3153
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3154
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    100     Using where
 
3155
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t3.a       1       NULL
 
3156
2       MATERIALIZED    t1      range   kp1     kp1     5       NULL    48      Using index condition; Using where; Using MRR
 
3157
2       MATERIALIZED    t4      eq_ref  PRIMARY PRIMARY 4       test.t1.c       1       Using index
 
3158
select * from t3 where a in 
 
3159
(select t1.kp1 from t1,t4 where kp1<20 and t4.pk=t1.c);
 
3160
a
 
3161
0
 
3162
10
 
3163
1
 
3164
11
 
3165
2
 
3166
12
 
3167
3
 
3168
13
 
3169
4
 
3170
14
 
3171
5
 
3172
15
 
3173
6
 
3174
16
 
3175
7
 
3176
17
 
3177
8
 
3178
18
 
3179
9
 
3180
19
 
3181
drop table t1, t3, t4;
 
3182
create table t1 (a int);
 
3183
insert into t1 values (0),(0),(0),(1),(1),(1),(2),(2),(2),(3),(3),(3);
 
3184
set @save_max_heap_table_size=@@max_heap_table_size;
 
3185
set @@max_heap_table_size= 16384;
 
3186
# Attempt to make one test that overflows the heap table when a
 
3187
# non-duplicate row is inserted and one test that overflows the
 
3188
# heap table when a duplicate record is inserted. Debugging showed
 
3189
# that these situations occurred with max_heap_table_size=16384
 
3190
# and optimizer_join_cache_level equals 1 and 0, respectively.
 
3191
# Finally execute a test that does not overflow the heap table.
 
3192
explain
 
3193
select count(*) from t0 A, t0 B, t0 C
 
3194
where C.a in (select a from t1 D);
 
3195
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3196
1       SIMPLE  A       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3197
1       SIMPLE  B       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3198
1       SIMPLE  C       ALL     NULL    NULL    NULL    NULL    10      Using where
 
3199
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.C.a        1       NULL
 
3200
2       MATERIALIZED    D       ALL     NULL    NULL    NULL    NULL    12      NULL
 
3201
flush status;
 
3202
select count(*) from t0 A, t0 B, t0 C
 
3203
where C.a in (select a from t1 D);
 
3204
count(*)
 
3205
400
 
3206
show status like 'Created_tmp_disk_tables';
 
3207
Variable_name   Value
 
3208
Created_tmp_disk_tables 0
 
3209
set @@max_heap_table_size= @save_max_heap_table_size;
 
3210
flush status;
 
3211
select count(*) from t0 A, t0 B, t0 C
 
3212
where C.a in (select a from t1 D);
 
3213
count(*)
 
3214
400
 
3215
show status like 'Created_tmp_disk_tables';
 
3216
Variable_name   Value
 
3217
Created_tmp_disk_tables 0
 
3218
drop table t0, t1;
 
3219
create table t0 (a int);
 
3220
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
3221
create table t2(a int);
 
3222
insert into t2 values (1),(2);
 
3223
create table t3 ( a int , filler char(100), key(a));
 
3224
insert into t3 select A.a + 10*B.a, 'filler' from t0 A, t0 B;
 
3225
explain select * from t3 where a in (select a from t2) and (a > 5 or a < 10);
 
3226
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3227
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; Start temporary
 
3228
1       SIMPLE  t3      ref     a       a       5       test.t2.a       1       End temporary; Using join buffer (Batched Key Access)
 
3229
select * from t3 where a in (select a from t2);
 
3230
a       filler
 
3231
1       filler
 
3232
2       filler
 
3233
drop table t0, t2, t3;
 
3234
create table t1 (a date);
 
3235
insert into t1 values ('2008-01-01'),('2008-01-01'),('2008-02-01'),('2008-02-01');
 
3236
create table t2 (a int);
 
3237
insert into t2 values (1),(2);
 
3238
create table t3 (a char(10));
 
3239
insert into t3 select * from t1;
 
3240
insert into t3 values (1),(2);
 
3241
explain select * from t2 where a in (select a from t1);
 
3242
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3243
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
3244
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    4       Using where; FirstMatch(t2)
 
3245
explain select * from t2 where a in (select a from t2);
 
3246
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3247
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
3248
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t2)
 
3249
explain select * from t2 where a in (select a from t3);
 
3250
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3251
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
3252
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    6       Using where; FirstMatch(t2)
 
3253
explain select * from t1 where a in (select a from t3);
 
3254
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3255
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    4       NULL
 
3256
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    6       Using where; FirstMatch(t1)
 
3257
drop table t1, t2, t3;
 
3258
create table t1 (a decimal);
 
3259
insert into t1 values (1),(2);
 
3260
explain select * from t1 where a in (select a from t1);
 
3261
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3262
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
3263
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
3264
drop table t1;
 
3265
create table t1 (a int);
 
3266
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
3267
create table t2 as select * from t1;
 
3268
create table t3 (a int, b int, filler char(100), key(a));
 
3269
insert into t3 select A.a + 10*B.a, A.a + 10*B.a, 'filler' from t1 A, t1 B, t1 C;
 
3270
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;
 
3271
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3272
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    10      Using where
 
3273
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
3274
1       SIMPLE  t3      ref     a       a       5       <subquery2>.a   10      Using join buffer (Batched Key Access)
 
3275
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    10      NULL
 
3276
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;
 
3277
EXPLAIN
 
3278
{
 
3279
  "query_block": {
 
3280
    "select_id": 1,
 
3281
    "nested_loop": [
 
3282
      {
 
3283
        "table": {
 
3284
          "table_name": "t1",
 
3285
          "access_type": "ALL",
 
3286
          "rows": 10,
 
3287
          "filtered": 100,
 
3288
          "attached_condition": "(`test`.`t1`.`a` = 3)"
 
3289
        }
 
3290
      },
 
3291
      {
 
3292
        "table": {
 
3293
          "table_name": "<subquery2>",
 
3294
          "access_type": "ALL",
 
3295
          "attached_condition": "(((`<subquery2>`.`a` < 10) or (`<subquery2>`.`a` > 30)) and (`<subquery2>`.`a` is not null))",
 
3296
          "materialized_from_subquery": {
 
3297
            "using_temporary_table": true,
 
3298
            "query_block": {
 
3299
              "table": {
 
3300
                "table_name": "t2",
 
3301
                "access_type": "ALL",
 
3302
                "rows": 10,
 
3303
                "filtered": 100
 
3304
              }
 
3305
            }
 
3306
          }
 
3307
        }
 
3308
      },
 
3309
      {
 
3310
        "table": {
 
3311
          "table_name": "t3",
 
3312
          "access_type": "ref",
 
3313
          "possible_keys": [
 
3314
            "a"
 
3315
          ],
 
3316
          "key": "a",
 
3317
          "used_key_parts": [
 
3318
            "a"
 
3319
          ],
 
3320
          "key_length": "5",
 
3321
          "ref": [
 
3322
            "<subquery2>.a"
 
3323
          ],
 
3324
          "rows": 10,
 
3325
          "filtered": 100,
 
3326
          "using_join_buffer": "Batched Key Access"
 
3327
        }
 
3328
      }
 
3329
    ]
 
3330
  }
 
3331
}
 
3332
Warnings:
 
3333
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` semi join (`test`.`t2`) join `test`.`t3` where ((`test`.`t3`.`a` = `<subquery2>`.`a`) and (`test`.`t1`.`a` = 3) and ((`<subquery2>`.`a` < 10) or (`<subquery2>`.`a` > 30)))
 
3334
explain select straight_join * from t1 A, t1 B where A.a in (select a from t2);
 
3335
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3336
1       PRIMARY A       ALL     NULL    NULL    NULL    NULL    10      Using where
 
3337
1       PRIMARY B       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3338
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    10      NULL
 
3339
explain select * from t2 where a in (select straight_join A.a from t1 A, t1 B);
 
3340
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3341
1       PRIMARY t2      ALL     NULL    NULL    NULL    NULL    10      Using where
 
3342
2       SUBQUERY        A       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3343
2       SUBQUERY        B       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3344
explain select * from t2 where a in (select straight_join A.a from t1 A, t1 B);
 
3345
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3346
1       PRIMARY t2      ALL     NULL    NULL    NULL    NULL    10      Using where
 
3347
2       SUBQUERY        A       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3348
2       SUBQUERY        B       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3349
explain select straight_join * from t2 X, t2 Y 
 
3350
where X.a in (select straight_join A.a from t1 A, t1 B);
 
3351
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3352
1       PRIMARY X       ALL     NULL    NULL    NULL    NULL    10      Using where
 
3353
1       PRIMARY Y       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3354
2       SUBQUERY        A       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3355
2       SUBQUERY        B       ALL     NULL    NULL    NULL    NULL    10      NULL
 
3356
create table t0 (a int, b int);
 
3357
insert into t0 values(1,1);
 
3358
explain select * from t0, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30);
 
3359
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3360
1       SIMPLE  t0      system  NULL    NULL    NULL    NULL    1       NULL
 
3361
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
3362
1       SIMPLE  t3      ref     a       a       5       <subquery2>.a   10      Using join buffer (Batched Key Access)
 
3363
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    10      NULL
 
3364
create table t4 as select a as x, a as y from t1;
 
3365
explain select * from t0, t3 where (t3.a, t3.b) in (select x,y from t4) and (t3.a < 10 or t3.a >30);
 
3366
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3367
1       SIMPLE  t0      system  NULL    NULL    NULL    NULL    1       NULL
 
3368
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
3369
1       SIMPLE  t3      ref     a       a       5       <subquery2>.x   10      Using where; Using join buffer (Batched Key Access)
 
3370
2       MATERIALIZED    t4      ALL     NULL    NULL    NULL    NULL    10      NULL
 
3371
drop table t0,t1,t2,t3,t4;
 
3372
create table t0 (a int);
 
3373
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
3374
create table t1 (a int, b int, filler char(100), key(a,b));
 
3375
insert into t1 select A.a, B.a, 'filler' from t0 A, t0 B;
 
3376
create table t2 as select * from t1;
 
3377
explain select * from t2 where a in (select b from t1 where a=3);
 
3378
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3379
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    100     Using where
 
3380
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t2.a       1       NULL
 
3381
2       MATERIALIZED    t1      ref     a       a       5       const   8       Using index
 
3382
explain select * from t2 where (b,a) in (select a,b from t1 where a=3);
 
3383
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3384
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    100     Using where
 
3385
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      10      test.t2.b,test.t2.a     1       Using where
 
3386
2       MATERIALIZED    t1      ref     a       a       5       const   8       Using index
 
3387
drop table t1,t2;
 
3388
create table t1 (a int, b int);
 
3389
insert into t1 select a,a from t0;
 
3390
create table t2 (a int, b int);
 
3391
insert into t2 select A.a + 10*B.a, A.a + 10*B.a from t0 A, t0 B;
 
3392
explain select * from t1 where (a,b) in (select a,b from t2);
 
3393
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3394
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    10      Using where
 
3395
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      10      test.t1.a,test.t1.b     1       NULL
 
3396
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    100     NULL
 
3397
drop table t0, t1, t2;
 
3398
create table t0 (a decimal(4,2));
 
3399
insert into t0 values (10.24), (22.11);
 
3400
create table t1 as select * from t0;
 
3401
insert into t1 select * from t0;
 
3402
explain select * from t0 where a in (select a from t1);
 
3403
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3404
1       SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    2       NULL
 
3405
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    4       Using where; FirstMatch(t0)
 
3406
select * from t0 where a in (select a from t1);
 
3407
a
 
3408
10.24
 
3409
22.11
 
3410
drop table t0, t1;
 
3411
create table t0(a date);
 
3412
insert into t0 values ('2008-01-01'),('2008-02-02');
 
3413
create table t1 as select * from t0;
 
3414
insert into t1 select * from t0;
 
3415
explain select * from t0 where a in (select a from t1);
 
3416
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3417
1       SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    2       NULL
 
3418
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    4       Using where; FirstMatch(t0)
 
3419
select * from t0 where a in (select a from t1);
 
3420
a
 
3421
2008-01-01
 
3422
2008-02-02
 
3423
drop table t0, t1;
 
3424
create table t0(a int);
 
3425
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
3426
create table t1 as select a as a, a as b, a as c from t0 where a < 3;
 
3427
create table t2 as select a as a, a as b from t0 where a < 3;
 
3428
insert into t2 select * from t2;
 
3429
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);
 
3430
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3431
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
3432
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      15      test.t1.a,test.t1.b,test.t1.c   1       NULL
 
3433
2       MATERIALIZED    X       ALL     NULL    NULL    NULL    NULL    6       Using where
 
3434
2       MATERIALIZED    Y       ALL     NULL    NULL    NULL    NULL    6       NULL
 
3435
2       MATERIALIZED    Z       ALL     NULL    NULL    NULL    NULL    6       NULL
 
3436
drop table t0,t1,t2;
 
3437
set @save_join_buffer_size = @@join_buffer_size;
 
3438
set join_buffer_size= 8192;
 
3439
create table t0 (a int);
 
3440
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
3441
create table t1 (a int, filler1 binary(200), filler2 binary(200));
 
3442
insert into t1 select a, 'filler123456', 'filler123456' from t0;
 
3443
insert into t1 select a+10, 'filler123456', 'filler123456' from t0;
 
3444
create table t2 as select * from t1;
 
3445
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
 
3446
insert into t1 values (2, 'duplicate ok', 'duplicate ok');
 
3447
insert into t1 values (18, 'duplicate ok', 'duplicate ok');
 
3448
insert into t2 values (3, 'duplicate ok', 'duplicate ok');
 
3449
insert into t2 values (19, 'duplicate ok', 'duplicate ok');
 
3450
explain select 
 
3451
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z 
 
3452
from t1 ot where a in (select a from t2 it);
 
3453
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3454
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
3455
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    32      Using where
 
3456
2       MATERIALIZED    it      ALL     NULL    NULL    NULL    NULL    22      NULL
 
3457
select 
 
3458
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z 
 
3459
from t1 ot where a in (select a from t2 it);
 
3460
a       mid(filler1, 1,10)      Z
 
3461
0       filler1234      1
 
3462
1       filler1234      1
 
3463
10      filler1234      1
 
3464
11      filler1234      1
 
3465
12      filler1234      1
 
3466
13      filler1234      1
 
3467
14      filler1234      1
 
3468
15      filler1234      1
 
3469
16      filler1234      1
 
3470
17      filler1234      1
 
3471
18      duplicate       1
 
3472
18      filler1234      1
 
3473
19      filler1234      1
 
3474
2       duplicate       1
 
3475
2       filler1234      1
 
3476
3       filler1234      1
 
3477
4       filler1234      1
 
3478
5       filler1234      1
 
3479
6       filler1234      1
 
3480
7       filler1234      1
 
3481
8       filler1234      1
 
3482
9       filler1234      1
 
3483
explain select 
 
3484
a, mid(filler1, 1,10), length(filler1)=length(filler2) 
 
3485
from t2 ot where a in (select a from t1 it);
 
3486
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3487
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    22      Using where
 
3488
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.ot.a       1       NULL
 
3489
2       MATERIALIZED    it      ALL     NULL    NULL    NULL    NULL    32      NULL
 
3490
select 
 
3491
a, mid(filler1, 1,10), length(filler1)=length(filler2) 
 
3492
from t2 ot where a in (select a from t1 it);
 
3493
a       mid(filler1, 1,10)      length(filler1)=length(filler2)
 
3494
0       filler1234      1
 
3495
1       filler1234      1
 
3496
10      filler1234      1
 
3497
11      filler1234      1
 
3498
12      filler1234      1
 
3499
13      filler1234      1
 
3500
14      filler1234      1
 
3501
15      filler1234      1
 
3502
16      filler1234      1
 
3503
17      filler1234      1
 
3504
18      filler1234      1
 
3505
19      duplicate       1
 
3506
19      filler1234      1
 
3507
2       filler1234      1
 
3508
3       duplicate       1
 
3509
3       filler1234      1
 
3510
4       filler1234      1
 
3511
5       filler1234      1
 
3512
6       filler1234      1
 
3513
7       filler1234      1
 
3514
8       filler1234      1
 
3515
9       filler1234      1
 
3516
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
 
3517
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
 
3518
explain select 
 
3519
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z 
 
3520
from t1 ot where a in (select a from t2 it);
 
3521
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3522
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
3523
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    52      Using where
 
3524
2       MATERIALIZED    it      ALL     NULL    NULL    NULL    NULL    22      NULL
 
3525
select 
 
3526
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z 
 
3527
from t1 ot where a in (select a from t2 it);
 
3528
a       mid(filler1, 1,10)      Z
 
3529
0       filler1234      1
 
3530
1       filler1234      1
 
3531
10      filler1234      1
 
3532
11      filler1234      1
 
3533
12      filler1234      1
 
3534
13      filler1234      1
 
3535
14      filler1234      1
 
3536
15      filler1234      1
 
3537
16      filler1234      1
 
3538
17      filler1234      1
 
3539
18      duplicate       1
 
3540
18      filler1234      1
 
3541
19      filler1234      1
 
3542
2       duplicate       1
 
3543
2       filler1234      1
 
3544
3       filler1234      1
 
3545
4       filler1234      1
 
3546
5       filler1234      1
 
3547
6       filler1234      1
 
3548
7       filler1234      1
 
3549
8       filler1234      1
 
3550
9       filler1234      1
 
3551
explain select 
 
3552
a, mid(filler1, 1,10), length(filler1)=length(filler2) 
 
3553
from t2 ot where a in (select a from t1 it);
 
3554
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3555
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    22      Using where
 
3556
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.ot.a       1       NULL
 
3557
2       MATERIALIZED    it      ALL     NULL    NULL    NULL    NULL    52      NULL
 
3558
select 
 
3559
a, mid(filler1, 1,10), length(filler1)=length(filler2) 
 
3560
from t2 ot where a in (select a from t1 it);
 
3561
a       mid(filler1, 1,10)      length(filler1)=length(filler2)
 
3562
0       filler1234      1
 
3563
1       filler1234      1
 
3564
10      filler1234      1
 
3565
11      filler1234      1
 
3566
12      filler1234      1
 
3567
13      filler1234      1
 
3568
14      filler1234      1
 
3569
15      filler1234      1
 
3570
16      filler1234      1
 
3571
17      filler1234      1
 
3572
18      filler1234      1
 
3573
19      duplicate       1
 
3574
19      filler1234      1
 
3575
2       filler1234      1
 
3576
3       duplicate       1
 
3577
3       filler1234      1
 
3578
4       filler1234      1
 
3579
5       filler1234      1
 
3580
6       filler1234      1
 
3581
7       filler1234      1
 
3582
8       filler1234      1
 
3583
9       filler1234      1
 
3584
set @@join_buffer_size = @save_join_buffer_size;
 
3585
drop table t1, t2;
 
3586
create table t1 (a int, b int, key(a));
 
3587
create table t2 (a int, b int, key(a));
 
3588
create table t3 (a int, b int, key(a));
 
3589
insert into t1 select a,a from t0;
 
3590
insert into t2 select a,a from t0;
 
3591
insert into t3 select a,a from t0;
 
3592
t2 and t3 must be use 'ref', not 'ALL':
 
3593
explain select * 
 
3594
from t0 where a in
 
3595
(select t2.a+t3.a from t1 left join (t2 join t3) on t2.a=t1.a and t3.a=t1.a);
 
3596
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
3597
1       SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    10      Using where
 
3598
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      9       test.t0.a       1       Using where
 
3599
2       MATERIALIZED    t1      index   a       a       5       NULL    10      Using index
 
3600
2       MATERIALIZED    t2      ref     a       a       5       test.t1.a       1       Using index
 
3601
2       MATERIALIZED    t3      ref     a       a       5       test.t1.a       1       Using index
 
3602
drop table t0, t1,t2,t3;
 
3603
 
 
3604
Test that neither MaterializeLookup strategy for semijoin,
 
3605
nor subquery materialization is used when BLOBs are involved 
 
3606
(except when arguments of some functions).
 
3607
 
 
3608
set @prefix_len = 6;
 
3609
set @blob_len = 16;
 
3610
set @suffix_len = @blob_len - @prefix_len;
 
3611
create table t1_16 (a1 blob(16), a2 blob(16));
 
3612
create table t2_16 (b1 blob(16), b2 blob(16));
 
3613
create table t3_16 (c1 blob(16), c2 blob(16));
 
3614
insert into t1_16 values
 
3615
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
 
3616
insert into t1_16 values
 
3617
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3618
insert into t1_16 values
 
3619
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3620
insert into t2_16 values
 
3621
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3622
insert into t2_16 values
 
3623
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3624
insert into t2_16 values
 
3625
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3626
insert into t3_16 values
 
3627
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3628
insert into t3_16 values
 
3629
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3630
insert into t3_16 values
 
3631
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3632
insert into t3_16 values
 
3633
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
 
3634
explain extended select left(a1,7), left(a2,7)
 
3635
from t1_16
 
3636
where a1 in (select b1 from t2_16 where b1 > '0');
 
3637
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3638
1       SIMPLE  t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3639
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3640
2       MATERIALIZED    t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3641
Warnings:
 
3642
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 ((`<subquery2>`.`b1` = `test`.`t1_16`.`a1`) and (`test`.`t2_16`.`b1` > '0'))
 
3643
select left(a1,7), left(a2,7)
 
3644
from t1_16
 
3645
where a1 in (select b1 from t2_16 where b1 > '0');
 
3646
left(a1,7)      left(a2,7)
 
3647
1 - 01x 2 - 01x
 
3648
1 - 02x 2 - 02x
 
3649
explain extended select left(a1,7), left(a2,7)
 
3650
from t1_16
 
3651
where (a1,a2) in (select b1, b2 from t2_16 where b1 > '0');
 
3652
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3653
1       SIMPLE  t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3654
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3655
2       MATERIALIZED    t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3656
Warnings:
 
3657
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 ((`<subquery2>`.`b2` = `test`.`t1_16`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1_16`.`a1`) and (`test`.`t2_16`.`b1` > '0'))
 
3658
select left(a1,7), left(a2,7)
 
3659
from t1_16
 
3660
where (a1,a2) in (select b1, b2 from t2_16 where b1 > '0');
 
3661
left(a1,7)      left(a2,7)
 
3662
1 - 01x 2 - 01x
 
3663
1 - 02x 2 - 02x
 
3664
explain extended select left(a1,7), left(a2,7)
 
3665
from t1_16
 
3666
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
 
3667
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3668
1       SIMPLE  t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3669
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      19      test.t1_16.a1   1       100.00  Using where
 
3670
2       MATERIALIZED    t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3671
Warnings:
 
3672
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` = `<subquery2>`.`substring(b1,1,16)`))
 
3673
select left(a1,7), left(a2,7)
 
3674
from t1_16
 
3675
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
 
3676
left(a1,7)      left(a2,7)
 
3677
1 - 01x 2 - 01x
 
3678
1 - 02x 2 - 02x
 
3679
explain extended select left(a1,7), left(a2,7)
 
3680
from t1_16
 
3681
where a1 in (select group_concat(b1) from t2_16 group by b2);
 
3682
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3683
1       PRIMARY t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3684
2       DEPENDENT SUBQUERY      t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
3685
Warnings:
 
3686
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 ',')))))
 
3687
select left(a1,7), left(a2,7)
 
3688
from t1_16
 
3689
where a1 in (select group_concat(b1) from t2_16 group by b2);
 
3690
left(a1,7)      left(a2,7)
 
3691
1 - 01x 2 - 01x
 
3692
1 - 02x 2 - 02x
 
3693
set @@group_concat_max_len = 256;
 
3694
explain extended select left(a1,7), left(a2,7)
 
3695
from t1_16
 
3696
where a1 in (select group_concat(b1) from t2_16 group by b2);
 
3697
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3698
1       PRIMARY t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3699
2       SUBQUERY        t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
3700
Warnings:
 
3701
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`,`test`.`t1_16`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_16`.`b1` separator ',') from `test`.`t2_16` group by `test`.`t2_16`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_16`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_16`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
3702
select left(a1,7), left(a2,7)
 
3703
from t1_16
 
3704
where a1 in (select group_concat(b1) from t2_16 group by b2);
 
3705
left(a1,7)      left(a2,7)
 
3706
1 - 01x 2 - 01x
 
3707
1 - 02x 2 - 02x
 
3708
create table t1 (a1 char(8), a2 char(8));
 
3709
create table t2 (b1 char(8), b2 char(8));
 
3710
create table t3 (c1 char(8), c2 char(8));
 
3711
insert into t1 values ('1 - 00', '2 - 00');
 
3712
insert into t1 values ('1 - 01', '2 - 01');
 
3713
insert into t1 values ('1 - 02', '2 - 02');
 
3714
insert into t2 values ('1 - 01', '2 - 01');
 
3715
insert into t2 values ('1 - 01', '2 - 01');
 
3716
insert into t2 values ('1 - 02', '2 - 02');
 
3717
insert into t2 values ('1 - 02', '2 - 02');
 
3718
insert into t2 values ('1 - 03', '2 - 03');
 
3719
insert into t3 values ('1 - 01', '2 - 01');
 
3720
insert into t3 values ('1 - 02', '2 - 02');
 
3721
insert into t3 values ('1 - 03', '2 - 03');
 
3722
insert into t3 values ('1 - 04', '2 - 04');
 
3723
explain extended
 
3724
select * from t1
 
3725
where concat(a1,'x') IN
 
3726
(select left(a1,8) from t1_16
 
3727
where (a1, a2) IN
 
3728
(select t2_16.b1, t2_16.b2 from t2_16, t2
 
3729
where t2.b2 = substring(t2_16.b2,1,6) and
 
3730
t2.b1 IN (select c1 from t3 where c2 > '0')));
 
3731
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3732
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3733
1       SIMPLE  t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3734
1       SIMPLE  t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3735
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    4       100.00  Using where
 
3736
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    5       100.00  Using where; FirstMatch(t1)
 
3737
Warnings:
 
3738
Note    1003    /* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2_16` join `test`.`t2` join `test`.`t1_16`) where ((`test`.`t2_16`.`b2` = `test`.`t1_16`.`a2`) and (`test`.`t2_16`.`b1` = `test`.`t1_16`.`a1`) and (`test`.`t2`.`b1` = `test`.`t3`.`c1`) 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)))
 
3739
drop table t1_16, t2_16, t3_16, t1, t2, t3;
 
3740
set @blob_len = 512;
 
3741
set @suffix_len = @blob_len - @prefix_len;
 
3742
create table t1_512 (a1 blob(512), a2 blob(512));
 
3743
create table t2_512 (b1 blob(512), b2 blob(512));
 
3744
create table t3_512 (c1 blob(512), c2 blob(512));
 
3745
insert into t1_512 values
 
3746
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
 
3747
insert into t1_512 values
 
3748
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3749
insert into t1_512 values
 
3750
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3751
insert into t2_512 values
 
3752
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3753
insert into t2_512 values
 
3754
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3755
insert into t2_512 values
 
3756
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3757
insert into t3_512 values
 
3758
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3759
insert into t3_512 values
 
3760
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3761
insert into t3_512 values
 
3762
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3763
insert into t3_512 values
 
3764
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
 
3765
explain extended select left(a1,7), left(a2,7)
 
3766
from t1_512
 
3767
where a1 in (select b1 from t2_512 where b1 > '0');
 
3768
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3769
1       SIMPLE  t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3770
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3771
2       MATERIALIZED    t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3772
Warnings:
 
3773
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 ((`<subquery2>`.`b1` = `test`.`t1_512`.`a1`) and (`test`.`t2_512`.`b1` > '0'))
 
3774
select left(a1,7), left(a2,7)
 
3775
from t1_512
 
3776
where a1 in (select b1 from t2_512 where b1 > '0');
 
3777
left(a1,7)      left(a2,7)
 
3778
1 - 01x 2 - 01x
 
3779
1 - 02x 2 - 02x
 
3780
explain extended select left(a1,7), left(a2,7)
 
3781
from t1_512
 
3782
where (a1,a2) in (select b1, b2 from t2_512 where b1 > '0');
 
3783
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3784
1       SIMPLE  t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3785
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3786
2       MATERIALIZED    t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3787
Warnings:
 
3788
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 ((`<subquery2>`.`b2` = `test`.`t1_512`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1_512`.`a1`) and (`test`.`t2_512`.`b1` > '0'))
 
3789
select left(a1,7), left(a2,7)
 
3790
from t1_512
 
3791
where (a1,a2) in (select b1, b2 from t2_512 where b1 > '0');
 
3792
left(a1,7)      left(a2,7)
 
3793
1 - 01x 2 - 01x
 
3794
1 - 02x 2 - 02x
 
3795
explain extended select left(a1,7), left(a2,7)
 
3796
from t1_512
 
3797
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
 
3798
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3799
1       SIMPLE  t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3800
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      515     test.t1_512.a1  1       100.00  Using where
 
3801
2       MATERIALIZED    t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3802
Warnings:
 
3803
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` = `<subquery2>`.`substring(b1,1,512)`))
 
3804
select left(a1,7), left(a2,7)
 
3805
from t1_512
 
3806
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
 
3807
left(a1,7)      left(a2,7)
 
3808
1 - 01x 2 - 01x
 
3809
1 - 02x 2 - 02x
 
3810
explain extended select left(a1,7), left(a2,7)
 
3811
from t1_512
 
3812
where a1 in (select group_concat(b1) from t2_512 group by b2);
 
3813
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3814
1       PRIMARY t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3815
2       SUBQUERY        t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
3816
Warnings:
 
3817
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`,`test`.`t1_512`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_512`.`b1` separator ',') from `test`.`t2_512` group by `test`.`t2_512`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_512`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
3818
select left(a1,7), left(a2,7)
 
3819
from t1_512
 
3820
where a1 in (select group_concat(b1) from t2_512 group by b2);
 
3821
left(a1,7)      left(a2,7)
 
3822
Warnings:
 
3823
Warning 1260    Row 1 was cut by GROUP_CONCAT()
 
3824
Warning 1260    Row 2 was cut by GROUP_CONCAT()
 
3825
Warning 1260    Row 3 was cut by GROUP_CONCAT()
 
3826
set @@group_concat_max_len = 256;
 
3827
explain extended select left(a1,7), left(a2,7)
 
3828
from t1_512
 
3829
where a1 in (select group_concat(b1) from t2_512 group by b2);
 
3830
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3831
1       PRIMARY t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3832
2       SUBQUERY        t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
3833
Warnings:
 
3834
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`,`test`.`t1_512`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_512`.`b1` separator ',') from `test`.`t2_512` group by `test`.`t2_512`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_512`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
3835
select left(a1,7), left(a2,7)
 
3836
from t1_512
 
3837
where a1 in (select group_concat(b1) from t2_512 group by b2);
 
3838
left(a1,7)      left(a2,7)
 
3839
Warnings:
 
3840
Warning 1260    Row 1 was cut by GROUP_CONCAT()
 
3841
Warning 1260    Row 2 was cut by GROUP_CONCAT()
 
3842
Warning 1260    Row 3 was cut by GROUP_CONCAT()
 
3843
drop table t1_512, t2_512, t3_512;
 
3844
set @blob_len = 513;
 
3845
set @suffix_len = @blob_len - @prefix_len;
 
3846
create table t1_513 (a1 blob(513), a2 blob(513));
 
3847
create table t2_513 (b1 blob(513), b2 blob(513));
 
3848
create table t3_513 (c1 blob(513), c2 blob(513));
 
3849
insert into t1_513 values
 
3850
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
 
3851
insert into t1_513 values
 
3852
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3853
insert into t1_513 values
 
3854
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3855
insert into t2_513 values
 
3856
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3857
insert into t2_513 values
 
3858
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3859
insert into t2_513 values
 
3860
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3861
insert into t3_513 values
 
3862
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3863
insert into t3_513 values
 
3864
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3865
insert into t3_513 values
 
3866
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3867
insert into t3_513 values
 
3868
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
 
3869
explain extended select left(a1,7), left(a2,7)
 
3870
from t1_513
 
3871
where a1 in (select b1 from t2_513 where b1 > '0');
 
3872
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3873
1       SIMPLE  t1_513  ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3874
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3875
2       MATERIALIZED    t2_513  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3876
Warnings:
 
3877
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 ((`<subquery2>`.`b1` = `test`.`t1_513`.`a1`) and (`test`.`t2_513`.`b1` > '0'))
 
3878
select left(a1,7), left(a2,7)
 
3879
from t1_513
 
3880
where a1 in (select b1 from t2_513 where b1 > '0');
 
3881
left(a1,7)      left(a2,7)
 
3882
1 - 01x 2 - 01x
 
3883
1 - 02x 2 - 02x
 
3884
explain extended select left(a1,7), left(a2,7)
 
3885
from t1_513
 
3886
where (a1,a2) in (select b1, b2 from t2_513 where b1 > '0');
 
3887
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3888
1       SIMPLE  t1_513  ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3889
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3890
2       MATERIALIZED    t2_513  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3891
Warnings:
 
3892
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 ((`<subquery2>`.`b2` = `test`.`t1_513`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1_513`.`a1`) and (`test`.`t2_513`.`b1` > '0'))
 
3893
select left(a1,7), left(a2,7)
 
3894
from t1_513
 
3895
where (a1,a2) in (select b1, b2 from t2_513 where b1 > '0');
 
3896
left(a1,7)      left(a2,7)
 
3897
1 - 01x 2 - 01x
 
3898
1 - 02x 2 - 02x
 
3899
explain extended select left(a1,7), left(a2,7)
 
3900
from t1_513
 
3901
where a1 in (select substring(b1,1,513) from t2_513 where b1 > '0');
 
3902
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3903
1       SIMPLE  t1_513  ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3904
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3905
2       MATERIALIZED    t2_513  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3906
Warnings:
 
3907
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` = `<subquery2>`.`substring(b1,1,513)`))
 
3908
select left(a1,7), left(a2,7)
 
3909
from t1_513
 
3910
where a1 in (select substring(b1,1,513) from t2_513 where b1 > '0');
 
3911
left(a1,7)      left(a2,7)
 
3912
1 - 01x 2 - 01x
 
3913
1 - 02x 2 - 02x
 
3914
explain extended select left(a1,7), left(a2,7)
 
3915
from t1_513
 
3916
where a1 in (select group_concat(b1) from t2_513 group by b2);
 
3917
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3918
1       PRIMARY t1_513  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3919
2       SUBQUERY        t2_513  ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
3920
Warnings:
 
3921
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`,`test`.`t1_513`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_513`.`b1` separator ',') from `test`.`t2_513` group by `test`.`t2_513`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_513`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_513`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
3922
select left(a1,7), left(a2,7)
 
3923
from t1_513
 
3924
where a1 in (select group_concat(b1) from t2_513 group by b2);
 
3925
left(a1,7)      left(a2,7)
 
3926
Warnings:
 
3927
Warning 1260    Row 1 was cut by GROUP_CONCAT()
 
3928
Warning 1260    Row 2 was cut by GROUP_CONCAT()
 
3929
Warning 1260    Row 3 was cut by GROUP_CONCAT()
 
3930
drop table t1_513, t2_513, t3_513;
 
3931
set @blob_len = 1024;
 
3932
set @suffix_len = @blob_len - @prefix_len;
 
3933
create table t1_1024 (a1 blob(1024), a2 blob(1024));
 
3934
create table t2_1024 (b1 blob(1024), b2 blob(1024));
 
3935
create table t3_1024 (c1 blob(1024), c2 blob(1024));
 
3936
insert into t1_1024 values
 
3937
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
 
3938
insert into t1_1024 values
 
3939
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3940
insert into t1_1024 values
 
3941
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3942
insert into t2_1024 values
 
3943
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3944
insert into t2_1024 values
 
3945
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3946
insert into t2_1024 values
 
3947
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3948
insert into t3_1024 values
 
3949
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
3950
insert into t3_1024 values
 
3951
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
3952
insert into t3_1024 values
 
3953
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
3954
insert into t3_1024 values
 
3955
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
 
3956
explain extended select left(a1,7), left(a2,7)
 
3957
from t1_1024
 
3958
where a1 in (select b1 from t2_1024 where b1 > '0');
 
3959
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3960
1       SIMPLE  t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3961
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3962
2       MATERIALIZED    t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3963
Warnings:
 
3964
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 ((`<subquery2>`.`b1` = `test`.`t1_1024`.`a1`) and (`test`.`t2_1024`.`b1` > '0'))
 
3965
select left(a1,7), left(a2,7)
 
3966
from t1_1024
 
3967
where a1 in (select b1 from t2_1024 where b1 > '0');
 
3968
left(a1,7)      left(a2,7)
 
3969
1 - 01x 2 - 01x
 
3970
1 - 02x 2 - 02x
 
3971
explain extended select left(a1,7), left(a2,7)
 
3972
from t1_1024
 
3973
where (a1,a2) in (select b1, b2 from t2_1024 where b1 > '0');
 
3974
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3975
1       SIMPLE  t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3976
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3977
2       MATERIALIZED    t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3978
Warnings:
 
3979
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 ((`<subquery2>`.`b2` = `test`.`t1_1024`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1_1024`.`a1`) and (`test`.`t2_1024`.`b1` > '0'))
 
3980
select left(a1,7), left(a2,7)
 
3981
from t1_1024
 
3982
where (a1,a2) in (select b1, b2 from t2_1024 where b1 > '0');
 
3983
left(a1,7)      left(a2,7)
 
3984
1 - 01x 2 - 01x
 
3985
1 - 02x 2 - 02x
 
3986
explain extended select left(a1,7), left(a2,7)
 
3987
from t1_1024
 
3988
where a1 in (select substring(b1,1,1024) from t2_1024 where b1 > '0');
 
3989
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
3990
1       SIMPLE  t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
3991
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
3992
2       MATERIALIZED    t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
3993
Warnings:
 
3994
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` = `<subquery2>`.`substring(b1,1,1024)`))
 
3995
select left(a1,7), left(a2,7)
 
3996
from t1_1024
 
3997
where a1 in (select substring(b1,1,1024) from t2_1024 where b1 > '0');
 
3998
left(a1,7)      left(a2,7)
 
3999
1 - 01x 2 - 01x
 
4000
1 - 02x 2 - 02x
 
4001
explain extended select left(a1,7), left(a2,7)
 
4002
from t1_1024
 
4003
where a1 in (select group_concat(b1) from t2_1024 group by b2);
 
4004
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
4005
1       PRIMARY t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
4006
2       SUBQUERY        t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
4007
Warnings:
 
4008
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`,`test`.`t1_1024`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_1024`.`b1` separator ',') from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_1024`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_1024`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
4009
select left(a1,7), left(a2,7)
 
4010
from t1_1024
 
4011
where a1 in (select group_concat(b1) from t2_1024 group by b2);
 
4012
left(a1,7)      left(a2,7)
 
4013
Warnings:
 
4014
Warning 1260    Row 1 was cut by GROUP_CONCAT()
 
4015
Warning 1260    Row 2 was cut by GROUP_CONCAT()
 
4016
Warning 1260    Row 3 was cut by GROUP_CONCAT()
 
4017
set @@group_concat_max_len = 256;
 
4018
explain extended select left(a1,7), left(a2,7)
 
4019
from t1_1024
 
4020
where a1 in (select group_concat(b1) from t2_1024 group by b2);
 
4021
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
4022
1       PRIMARY t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
4023
2       SUBQUERY        t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
4024
Warnings:
 
4025
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`,`test`.`t1_1024`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_1024`.`b1` separator ',') from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_1024`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_1024`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
4026
select left(a1,7), left(a2,7)
 
4027
from t1_1024
 
4028
where a1 in (select group_concat(b1) from t2_1024 group by b2);
 
4029
left(a1,7)      left(a2,7)
 
4030
Warnings:
 
4031
Warning 1260    Row 1 was cut by GROUP_CONCAT()
 
4032
Warning 1260    Row 2 was cut by GROUP_CONCAT()
 
4033
Warning 1260    Row 3 was cut by GROUP_CONCAT()
 
4034
drop table t1_1024, t2_1024, t3_1024;
 
4035
set @blob_len = 1025;
 
4036
set @suffix_len = @blob_len - @prefix_len;
 
4037
create table t1_1025 (a1 blob(1025), a2 blob(1025));
 
4038
create table t2_1025 (b1 blob(1025), b2 blob(1025));
 
4039
create table t3_1025 (c1 blob(1025), c2 blob(1025));
 
4040
insert into t1_1025 values
 
4041
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
 
4042
insert into t1_1025 values
 
4043
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
4044
insert into t1_1025 values
 
4045
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
4046
insert into t2_1025 values
 
4047
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
4048
insert into t2_1025 values
 
4049
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
4050
insert into t2_1025 values
 
4051
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
4052
insert into t3_1025 values
 
4053
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
 
4054
insert into t3_1025 values
 
4055
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
 
4056
insert into t3_1025 values
 
4057
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
 
4058
insert into t3_1025 values
 
4059
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
 
4060
explain extended select left(a1,7), left(a2,7)
 
4061
from t1_1025
 
4062
where a1 in (select b1 from t2_1025 where b1 > '0');
 
4063
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
4064
1       SIMPLE  t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
4065
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
4066
2       MATERIALIZED    t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
4067
Warnings:
 
4068
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 ((`<subquery2>`.`b1` = `test`.`t1_1025`.`a1`) and (`test`.`t2_1025`.`b1` > '0'))
 
4069
select left(a1,7), left(a2,7)
 
4070
from t1_1025
 
4071
where a1 in (select b1 from t2_1025 where b1 > '0');
 
4072
left(a1,7)      left(a2,7)
 
4073
1 - 01x 2 - 01x
 
4074
1 - 02x 2 - 02x
 
4075
explain extended select left(a1,7), left(a2,7)
 
4076
from t1_1025
 
4077
where (a1,a2) in (select b1, b2 from t2_1025 where b1 > '0');
 
4078
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
4079
1       SIMPLE  t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
4080
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
4081
2       MATERIALIZED    t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
4082
Warnings:
 
4083
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 ((`<subquery2>`.`b2` = `test`.`t1_1025`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1_1025`.`a1`) and (`test`.`t2_1025`.`b1` > '0'))
 
4084
select left(a1,7), left(a2,7)
 
4085
from t1_1025
 
4086
where (a1,a2) in (select b1, b2 from t2_1025 where b1 > '0');
 
4087
left(a1,7)      left(a2,7)
 
4088
1 - 01x 2 - 01x
 
4089
1 - 02x 2 - 02x
 
4090
explain extended select left(a1,7), left(a2,7)
 
4091
from t1_1025
 
4092
where a1 in (select substring(b1,1,1025) from t2_1025 where b1 > '0');
 
4093
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
4094
1       SIMPLE  t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  NULL
 
4095
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    Using where
 
4096
2       MATERIALIZED    t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
4097
Warnings:
 
4098
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` = `<subquery2>`.`substring(b1,1,1025)`))
 
4099
select left(a1,7), left(a2,7)
 
4100
from t1_1025
 
4101
where a1 in (select substring(b1,1,1025) from t2_1025 where b1 > '0');
 
4102
left(a1,7)      left(a2,7)
 
4103
1 - 01x 2 - 01x
 
4104
1 - 02x 2 - 02x
 
4105
explain extended select left(a1,7), left(a2,7)
 
4106
from t1_1025
 
4107
where a1 in (select group_concat(b1) from t2_1025 group by b2);
 
4108
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
4109
1       PRIMARY t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
4110
2       SUBQUERY        t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
4111
Warnings:
 
4112
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`,`test`.`t1_1025`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_1025`.`b1` separator ',') from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_1025`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_1025`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
4113
select left(a1,7), left(a2,7)
 
4114
from t1_1025
 
4115
where a1 in (select group_concat(b1) from t2_1025 group by b2);
 
4116
left(a1,7)      left(a2,7)
 
4117
Warnings:
 
4118
Warning 1260    Row 1 was cut by GROUP_CONCAT()
 
4119
Warning 1260    Row 2 was cut by GROUP_CONCAT()
 
4120
Warning 1260    Row 3 was cut by GROUP_CONCAT()
 
4121
set @@group_concat_max_len = 256;
 
4122
explain extended select left(a1,7), left(a2,7)
 
4123
from t1_1025
 
4124
where a1 in (select group_concat(b1) from t2_1025 group by b2);
 
4125
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
4126
1       PRIMARY t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
 
4127
2       SUBQUERY        t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
 
4128
Warnings:
 
4129
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`,`test`.`t1_1025`.`a1` in ( <materialize> (/* select#2 */ select group_concat(`test`.`t2_1025`.`b1` separator ',') from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` having 1 ), <primary_index_lookup>(`test`.`t1_1025`.`a1` in <temporary table> on <auto_key> where ((`test`.`t1_1025`.`a1` = `materialized-subquery`.`group_concat(b1)`)))))
 
4130
select left(a1,7), left(a2,7)
 
4131
from t1_1025
 
4132
where a1 in (select group_concat(b1) from t2_1025 group by b2);
 
4133
left(a1,7)      left(a2,7)
 
4134
Warnings:
 
4135
Warning 1260    Row 1 was cut by GROUP_CONCAT()
 
4136
Warning 1260    Row 2 was cut by GROUP_CONCAT()
 
4137
Warning 1260    Row 3 was cut by GROUP_CONCAT()
 
4138
drop table t1_1025, t2_1025, t3_1025;
 
4139
#
 
4140
# WL#5561: Enable semi join transformation with outer join.
 
4141
#
 
4142
CREATE TABLE ot1(a INT);
 
4143
CREATE TABLE ot2(a INT);
 
4144
CREATE TABLE ot3(a INT);
 
4145
CREATE TABLE it1(a INT);
 
4146
CREATE TABLE it2(a INT);
 
4147
CREATE TABLE it3(a INT);
 
4148
INSERT INTO ot1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
 
4149
INSERT INTO ot2 VALUES(0),(2),(4),(6);
 
4150
INSERT INTO ot3 VALUES(0),(3),(6);
 
4151
INSERT INTO it1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
 
4152
INSERT INTO it2 VALUES(0),(2),(4),(6);
 
4153
INSERT INTO it3 VALUES(0),(3),(6);
 
4154
# Test cases, Subquery Pattern 1
 
4155
# Example SQ1.1:
 
4156
explain SELECT *
 
4157
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4158
WHERE ot1.a IN (SELECT a FROM it3);
 
4159
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4160
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
4161
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       Using where
 
4162
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4163
2       MATERIALIZED    it3     ALL     NULL    NULL    NULL    NULL    3       NULL
 
4164
SELECT *
 
4165
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4166
WHERE ot1.a IN (SELECT a FROM it3);
 
4167
a       a
 
4168
0       0
 
4169
3       NULL
 
4170
6       6
 
4171
# Example SQ1.2:
 
4172
explain SELECT *
 
4173
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4174
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
 
4175
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4176
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
4177
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4178
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4179
2       MATERIALIZED    it3     ALL     NULL    NULL    NULL    NULL    3       NULL
 
4180
SELECT *
 
4181
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4182
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
 
4183
a       a
 
4184
0       0
 
4185
1       NULL
 
4186
3       NULL
 
4187
5       NULL
 
4188
6       6
 
4189
7       NULL
 
4190
# Example SQ1.3:
 
4191
explain SELECT *
 
4192
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4193
WHERE (ot1.a,ot2.a) IN (SELECT a, a FROM it3);
 
4194
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4195
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
4196
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4197
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       Using where
 
4198
2       MATERIALIZED    it3     ALL     NULL    NULL    NULL    NULL    3       NULL
 
4199
SELECT *
 
4200
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4201
WHERE (ot1.a,ot2.a) IN (SELECT a, a FROM it3);
 
4202
a       a
 
4203
0       0
 
4204
6       6
 
4205
# More test cases
 
4206
SELECT *
 
4207
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
 
4208
WHERE ot1.a IN (SELECT a FROM it3);
 
4209
a       a
 
4210
0       0
 
4211
3       NULL
 
4212
6       6
 
4213
SELECT *
 
4214
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
 
4215
WHERE ot1.a IN (SELECT a+0 FROM it3);
 
4216
a       a
 
4217
0       0
 
4218
3       NULL
 
4219
6       6
 
4220
SELECT *
 
4221
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
 
4222
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
 
4223
a       a
 
4224
0       0
 
4225
1       NULL
 
4226
3       NULL
 
4227
5       NULL
 
4228
6       6
 
4229
7       NULL
 
4230
SELECT *
 
4231
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4232
WHERE COALESCE(ot2.a,0) IN (SELECT a+0 FROM it3);
 
4233
a       a
 
4234
0       0
 
4235
1       NULL
 
4236
3       NULL
 
4237
5       NULL
 
4238
6       6
 
4239
7       NULL
 
4240
SELECT *
 
4241
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0
 
4242
WHERE (ot1.a,ot2.a) IN (SELECT a, a FROM it3);
 
4243
a       a
 
4244
0       0
 
4245
6       6
 
4246
SELECT *
 
4247
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4248
LEFT JOIN ot3 ON ot1.a=ot3.a
 
4249
WHERE ot1.a IN (SELECT a FROM it3);
 
4250
a       a       a
 
4251
0       0       0
 
4252
3       NULL    3
 
4253
6       6       6
 
4254
SELECT *
 
4255
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4256
LEFT JOIN ot3 ON ot1.a=ot3.a
 
4257
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
 
4258
a       a       a
 
4259
0       0       0
 
4260
1       NULL    NULL
 
4261
3       NULL    3
 
4262
5       NULL    NULL
 
4263
6       6       6
 
4264
7       NULL    NULL
 
4265
SELECT *
 
4266
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4267
LEFT JOIN ot3 ON ot1.a=ot3.a
 
4268
WHERE COALESCE(ot3.a,0) IN (SELECT a FROM it3);
 
4269
a       a       a
 
4270
0       0       0
 
4271
1       NULL    NULL
 
4272
2       2       NULL
 
4273
3       NULL    3
 
4274
4       4       NULL
 
4275
5       NULL    NULL
 
4276
6       6       6
 
4277
7       NULL    NULL
 
4278
SELECT *
 
4279
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4280
LEFT JOIN ot3 ON ot2.a=ot3.a
 
4281
WHERE ot1.a IN (SELECT a FROM it3);
 
4282
a       a       a
 
4283
0       0       0
 
4284
3       NULL    NULL
 
4285
6       6       6
 
4286
SELECT *
 
4287
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4288
LEFT JOIN ot3 ON ot2.a=ot3.a
 
4289
WHERE COALESCE(ot2.a,0) IN (SELECT a FROM it3);
 
4290
a       a       a
 
4291
0       0       0
 
4292
1       NULL    NULL
 
4293
3       NULL    NULL
 
4294
5       NULL    NULL
 
4295
6       6       6
 
4296
7       NULL    NULL
 
4297
SELECT *
 
4298
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a
 
4299
LEFT JOIN ot3 ON ot2.a=ot3.a
 
4300
WHERE COALESCE(ot3.a,0) IN (SELECT a FROM it3);
 
4301
a       a       a
 
4302
0       0       0
 
4303
1       NULL    NULL
 
4304
2       2       NULL
 
4305
3       NULL    NULL
 
4306
4       4       NULL
 
4307
5       NULL    NULL
 
4308
6       6       6
 
4309
7       NULL    NULL
 
4310
# Test cases, Subquery Pattern 2
 
4311
# Example SQ2.1:
 
4312
explain SELECT *
 
4313
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
 
4314
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4315
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
4316
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       Using where
 
4317
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4318
2       MATERIALIZED    it3     ALL     NULL    NULL    NULL    NULL    3       NULL
 
4319
SELECT *
 
4320
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
 
4321
a       a
 
4322
0       0
 
4323
6       6
 
4324
# Example SQ2.2:
 
4325
explain SELECT *
 
4326
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it2)
 
4327
AND ot2.a IN (SELECT a FROM it3);
 
4328
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4329
1       SIMPLE  <subquery3>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
4330
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4331
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
4332
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       Using where
 
4333
3       MATERIALIZED    it3     ALL     NULL    NULL    NULL    NULL    3       NULL
 
4334
2       MATERIALIZED    it2     ALL     NULL    NULL    NULL    NULL    4       NULL
 
4335
SELECT *
 
4336
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it2)
 
4337
AND ot2.a IN (SELECT a FROM it3);
 
4338
a       a
 
4339
0       0
 
4340
6       6
 
4341
# More test cases
 
4342
SELECT *
 
4343
FROM ot1 JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it3);
 
4344
a       a
 
4345
0       0
 
4346
6       6
 
4347
SELECT *
 
4348
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it3);
 
4349
a       a
 
4350
0       0
 
4351
6       6
 
4352
SELECT *
 
4353
FROM ot1 JOIN ot2 ON ot1.a=ot2.a+0 AND ot2.a IN (SELECT a FROM it3);
 
4354
a       a
 
4355
0       0
 
4356
6       6
 
4357
SELECT *
 
4358
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a+0 FROM it3);
 
4359
a       a
 
4360
0       0
 
4361
6       6
 
4362
SELECT *
 
4363
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it2)
 
4364
AND ot2.a IN (SELECT a+0 FROM it3);
 
4365
a       a
 
4366
0       0
 
4367
6       6
 
4368
SELECT *
 
4369
FROM ot1 JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3)
 
4370
JOIN ot3 ON ot2.a=ot3.a AND ot3.a IN (SELECT a FROM it3);
 
4371
a       a       a
 
4372
0       0       0
 
4373
6       6       6
 
4374
# Test cases, Subquery Pattern 3
 
4375
# Example SQ3.1:
 
4376
explain SELECT *
 
4377
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
 
4378
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4379
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4380
1       SIMPLE  it3     ALL     NULL    NULL    NULL    NULL    3       Using where; FirstMatch(ot1)
 
4381
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4382
SELECT *
 
4383
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3);
 
4384
a       a
 
4385
0       0
 
4386
1       NULL
 
4387
2       NULL
 
4388
3       NULL
 
4389
4       NULL
 
4390
5       NULL
 
4391
6       6
 
4392
7       NULL
 
4393
# Example SQ3.2:
 
4394
explain SELECT *
 
4395
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a FROM it2);
 
4396
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4397
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4398
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4399
1       SIMPLE  it2     ALL     NULL    NULL    NULL    NULL    4       Using where; FirstMatch(ot2)
 
4400
SELECT *
 
4401
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a FROM it2);
 
4402
a       a
 
4403
0       0
 
4404
1       NULL
 
4405
2       2
 
4406
3       NULL
 
4407
4       4
 
4408
5       NULL
 
4409
6       6
 
4410
7       NULL
 
4411
# Example SQ3.3
 
4412
explain SELECT *
 
4413
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1)
 
4414
AND ot2.a IN (SELECT a FROM it2);
 
4415
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4416
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4417
1       SIMPLE  it1     ALL     NULL    NULL    NULL    NULL    8       Using where; FirstMatch(ot1)
 
4418
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4419
1       SIMPLE  it2     ALL     NULL    NULL    NULL    NULL    4       Using where; FirstMatch(ot2)
 
4420
SELECT *
 
4421
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1)
 
4422
AND ot2.a IN (SELECT a FROM it2);
 
4423
a       a
 
4424
0       0
 
4425
1       NULL
 
4426
2       2
 
4427
3       NULL
 
4428
4       4
 
4429
5       NULL
 
4430
6       6
 
4431
7       NULL
 
4432
# Example SQ3.4
 
4433
explain SELECT *
 
4434
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND
 
4435
(ot1.a, ot2.a) IN (SELECT it1.a, it2.a
 
4436
FROM it1 JOIN it2 ON it1.a=it2.a);
 
4437
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4438
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4439
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4440
1       SIMPLE  it2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4441
1       SIMPLE  it1     ALL     NULL    NULL    NULL    NULL    8       Using where; FirstMatch(ot2)
 
4442
SELECT *
 
4443
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND
 
4444
(ot1.a, ot2.a) IN (SELECT it1.a, it2.a
 
4445
FROM it1 JOIN it2 ON it1.a=it2.a);
 
4446
a       a
 
4447
0       0
 
4448
1       NULL
 
4449
2       2
 
4450
3       NULL
 
4451
4       4
 
4452
5       NULL
 
4453
6       6
 
4454
7       NULL
 
4455
# More test cases
 
4456
SELECT *
 
4457
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it3);
 
4458
a       a
 
4459
0       0
 
4460
1       NULL
 
4461
2       NULL
 
4462
3       NULL
 
4463
4       NULL
 
4464
5       NULL
 
4465
6       6
 
4466
7       NULL
 
4467
SELECT *
 
4468
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it3);
 
4469
a       a
 
4470
0       0
 
4471
1       NULL
 
4472
2       NULL
 
4473
3       NULL
 
4474
4       NULL
 
4475
5       NULL
 
4476
6       6
 
4477
7       NULL
 
4478
SELECT *
 
4479
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot2.a IN (SELECT a FROM it2);
 
4480
a       a
 
4481
0       0
 
4482
1       NULL
 
4483
2       2
 
4484
3       NULL
 
4485
4       4
 
4486
5       NULL
 
4487
6       6
 
4488
7       NULL
 
4489
SELECT *
 
4490
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot2.a IN (SELECT a+0 FROM it2);
 
4491
a       a
 
4492
0       0
 
4493
1       NULL
 
4494
2       2
 
4495
3       NULL
 
4496
4       4
 
4497
5       NULL
 
4498
6       6
 
4499
7       NULL
 
4500
SELECT *
 
4501
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a+0 FROM it1)
 
4502
AND ot2.a IN (SELECT a+0 FROM it2);
 
4503
a       a
 
4504
0       0
 
4505
1       NULL
 
4506
2       2
 
4507
3       NULL
 
4508
4       4
 
4509
5       NULL
 
4510
6       6
 
4511
7       NULL
 
4512
SELECT *
 
4513
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND
 
4514
(ot1.a, ot2.a) IN (SELECT it1.a+0, it2.a+0
 
4515
FROM it1 JOIN it2 ON it1.a=it2.a);
 
4516
a       a
 
4517
0       0
 
4518
1       NULL
 
4519
2       2
 
4520
3       NULL
 
4521
4       4
 
4522
5       NULL
 
4523
6       6
 
4524
7       NULL
 
4525
SELECT *
 
4526
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it3)
 
4527
LEFT JOIN ot3 ON ot2.a=ot3.a AND ot3.a IN (SELECT a FROM it3);
 
4528
a       a       a
 
4529
0       0       0
 
4530
1       NULL    NULL
 
4531
2       NULL    NULL
 
4532
3       NULL    NULL
 
4533
4       NULL    NULL
 
4534
5       NULL    NULL
 
4535
6       6       6
 
4536
7       NULL    NULL
 
4537
SELECT *
 
4538
FROM ot1 LEFT JOIN ot2 ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it3)
 
4539
LEFT JOIN ot3 ON ot2.a=ot3.a+0 AND ot3.a IN (SELECT a FROM it3);
 
4540
a       a       a
 
4541
0       0       0
 
4542
1       NULL    NULL
 
4543
2       NULL    NULL
 
4544
3       NULL    NULL
 
4545
4       NULL    NULL
 
4546
5       NULL    NULL
 
4547
6       6       6
 
4548
7       NULL    NULL
 
4549
# Test cases, Subquery Pattern 4
 
4550
# Example SQ4.1:
 
4551
explain SELECT *
 
4552
FROM   ot1
 
4553
LEFT JOIN
 
4554
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4555
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4556
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4557
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4558
1       SIMPLE  it1     ALL     NULL    NULL    NULL    NULL    8       Using where; FirstMatch(ot1)
 
4559
1       SIMPLE  ot3     ALL     NULL    NULL    NULL    NULL    3       NULL
 
4560
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4561
SELECT *
 
4562
FROM   ot1
 
4563
LEFT JOIN
 
4564
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4565
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4566
a       a       a
 
4567
0       0       0
 
4568
1       NULL    NULL
 
4569
2       NULL    NULL
 
4570
3       NULL    NULL
 
4571
4       NULL    NULL
 
4572
5       NULL    NULL
 
4573
6       6       6
 
4574
7       NULL    NULL
 
4575
# Example SQ4.2:
 
4576
explain SELECT *
 
4577
FROM   ot1
 
4578
JOIN
 
4579
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4580
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4581
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4582
1       SIMPLE  ot3     ALL     NULL    NULL    NULL    NULL    3       Using where
 
4583
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4584
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       Using where
 
4585
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.ot3.a      1       NULL
 
4586
2       MATERIALIZED    it1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4587
SELECT *
 
4588
FROM   ot1
 
4589
JOIN
 
4590
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4591
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4592
a       a       a
 
4593
0       0       0
 
4594
6       6       6
 
4595
# Example SQ4.3:
 
4596
explain SELECT *
 
4597
FROM   ot1
 
4598
JOIN
 
4599
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4600
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4601
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4602
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4603
1       SIMPLE  ot3     ALL     NULL    NULL    NULL    NULL    3       Using where
 
4604
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       Using where
 
4605
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.ot2.a      1       NULL
 
4606
2       MATERIALIZED    it1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4607
SELECT *
 
4608
FROM   ot1
 
4609
JOIN
 
4610
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4611
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4612
a       a       a
 
4613
0       0       0
 
4614
2       2       NULL
 
4615
4       4       NULL
 
4616
6       6       6
 
4617
# Example SQ4.4:
 
4618
explain SELECT *
 
4619
FROM   ot1
 
4620
LEFT JOIN
 
4621
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4622
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4623
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4624
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
4625
1       SIMPLE  it1     ALL     NULL    NULL    NULL    NULL    8       Using where; FirstMatch(ot1)
 
4626
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
4627
1       SIMPLE  ot3     ALL     NULL    NULL    NULL    NULL    3       Using where
 
4628
SELECT *
 
4629
FROM   ot1
 
4630
LEFT JOIN
 
4631
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4632
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4633
a       a       a
 
4634
0       0       0
 
4635
1       NULL    NULL
 
4636
2       2       NULL
 
4637
3       NULL    NULL
 
4638
4       4       NULL
 
4639
5       NULL    NULL
 
4640
6       6       6
 
4641
7       NULL    NULL
 
4642
# More test cases
 
4643
SELECT *
 
4644
FROM   ot1
 
4645
LEFT JOIN
 
4646
(ot2 JOIN ot3 ON ot2.a=ot3.a+0)
 
4647
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4648
a       a       a
 
4649
0       0       0
 
4650
1       NULL    NULL
 
4651
2       NULL    NULL
 
4652
3       NULL    NULL
 
4653
4       NULL    NULL
 
4654
5       NULL    NULL
 
4655
6       6       6
 
4656
7       NULL    NULL
 
4657
SELECT *
 
4658
FROM   ot1
 
4659
LEFT JOIN
 
4660
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4661
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
 
4662
a       a       a
 
4663
0       0       0
 
4664
1       NULL    NULL
 
4665
2       NULL    NULL
 
4666
3       NULL    NULL
 
4667
4       NULL    NULL
 
4668
5       NULL    NULL
 
4669
6       6       6
 
4670
7       NULL    NULL
 
4671
SELECT *
 
4672
FROM   ot1
 
4673
LEFT JOIN
 
4674
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4675
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
 
4676
a       a       a
 
4677
0       0       0
 
4678
1       NULL    NULL
 
4679
2       NULL    NULL
 
4680
3       NULL    NULL
 
4681
4       NULL    NULL
 
4682
5       NULL    NULL
 
4683
6       6       6
 
4684
7       NULL    NULL
 
4685
SELECT *
 
4686
FROM   ot1
 
4687
JOIN
 
4688
(ot2 JOIN ot3 ON ot2.a=ot3.a+0)
 
4689
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4690
a       a       a
 
4691
0       0       0
 
4692
6       6       6
 
4693
SELECT *
 
4694
FROM   ot1
 
4695
JOIN
 
4696
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4697
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
 
4698
a       a       a
 
4699
0       0       0
 
4700
6       6       6
 
4701
SELECT *
 
4702
FROM   ot1
 
4703
JOIN
 
4704
(ot2 JOIN ot3 ON ot2.a=ot3.a)
 
4705
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
 
4706
a       a       a
 
4707
0       0       0
 
4708
6       6       6
 
4709
SELECT *
 
4710
FROM   ot1
 
4711
JOIN
 
4712
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a+0)
 
4713
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4714
a       a       a
 
4715
0       0       0
 
4716
2       2       NULL
 
4717
4       4       NULL
 
4718
6       6       6
 
4719
SELECT *
 
4720
FROM   ot1
 
4721
JOIN
 
4722
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4723
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
 
4724
a       a       a
 
4725
0       0       0
 
4726
2       2       NULL
 
4727
4       4       NULL
 
4728
6       6       6
 
4729
SELECT *
 
4730
FROM   ot1
 
4731
JOIN
 
4732
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4733
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
 
4734
a       a       a
 
4735
0       0       0
 
4736
2       2       NULL
 
4737
4       4       NULL
 
4738
6       6       6
 
4739
SELECT *
 
4740
FROM   ot1
 
4741
LEFT JOIN
 
4742
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a+0)
 
4743
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4744
a       a       a
 
4745
0       0       0
 
4746
1       NULL    NULL
 
4747
2       2       NULL
 
4748
3       NULL    NULL
 
4749
4       4       NULL
 
4750
5       NULL    NULL
 
4751
6       6       6
 
4752
7       NULL    NULL
 
4753
SELECT *
 
4754
FROM   ot1
 
4755
LEFT JOIN
 
4756
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4757
ON ot1.a=ot2.a+0 AND ot1.a IN (SELECT a FROM it1);
 
4758
a       a       a
 
4759
0       0       0
 
4760
1       NULL    NULL
 
4761
2       2       NULL
 
4762
3       NULL    NULL
 
4763
4       4       NULL
 
4764
5       NULL    NULL
 
4765
6       6       6
 
4766
7       NULL    NULL
 
4767
SELECT *
 
4768
FROM   ot1
 
4769
LEFT JOIN
 
4770
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4771
ON ot1.a=ot2.a AND ot1.a IN (SELECT a+0 FROM it1);
 
4772
a       a       a
 
4773
0       0       0
 
4774
1       NULL    NULL
 
4775
2       2       NULL
 
4776
3       NULL    NULL
 
4777
4       4       NULL
 
4778
5       NULL    NULL
 
4779
6       6       6
 
4780
7       NULL    NULL
 
4781
SELECT *
 
4782
FROM   ot1
 
4783
LEFT JOIN
 
4784
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a)
 
4785
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1)
 
4786
LEFT JOIN
 
4787
ot1 AS ot4
 
4788
ON ot2.a=ot4.a;
 
4789
a       a       a       a
 
4790
0       0       0       0
 
4791
1       NULL    NULL    NULL
 
4792
2       2       NULL    2
 
4793
3       NULL    NULL    NULL
 
4794
4       4       NULL    4
 
4795
5       NULL    NULL    NULL
 
4796
6       6       6       6
 
4797
7       NULL    NULL    NULL
 
4798
SELECT *
 
4799
FROM   ot1
 
4800
LEFT JOIN
 
4801
(ot2 LEFT JOIN ot3 ON ot2.a=ot3.a
 
4802
LEFT JOIN ot1 AS ot4 ON ot3.a=ot4.a)
 
4803
ON ot1.a=ot2.a AND ot1.a IN (SELECT a FROM it1);
 
4804
a       a       a       a
 
4805
0       0       0       0
 
4806
1       NULL    NULL    NULL
 
4807
2       2       NULL    NULL
 
4808
3       NULL    NULL    NULL
 
4809
4       4       NULL    NULL
 
4810
5       NULL    NULL    NULL
 
4811
6       6       6       6
 
4812
7       NULL    NULL    NULL
 
4813
DROP TABLE ot1,ot2,ot3,it1,it2,it3;
 
4814
CREATE TABLE t (
 
4815
a INTEGER DEFAULT NULL
 
4816
) ENGINE=InnoDB;
 
4817
INSERT INTO t VALUES (1);
 
4818
CREATE TABLE t2 (
 
4819
a INTEGER DEFAULT NULL
 
4820
) ENGINE=InnoDB;
 
4821
INSERT INTO t2 VALUES (1),(1);
 
4822
CREATE TABLE t4 (
 
4823
a INTEGER DEFAULT NULL
 
4824
) ENGINE=InnoDB;
 
4825
INSERT INTO t4 VALUES (1),(1);
 
4826
CREATE TABLE v (
 
4827
a INTEGER DEFAULT NULL
 
4828
) ENGINE=InnoDB;
 
4829
INSERT INTO v VALUES (1),(1);
 
4830
explain SELECT *
 
4831
FROM t AS t1
 
4832
LEFT JOIN
 
4833
(t2
 
4834
LEFT JOIN t AS t3
 
4835
ON t3.a IN (SELECT a FROM t AS it)
 
4836
JOIN t4
 
4837
ON t4.a=100
 
4838
)
 
4839
ON TRUE
 
4840
WHERE t1.a IN (SELECT * FROM v AS it2);
 
4841
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
4842
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    1       NULL
 
4843
1       SIMPLE  it2     ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(t1)
 
4844
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
4845
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    1       Using where
 
4846
1       SIMPLE  it      ALL     NULL    NULL    NULL    NULL    1       Using where; FirstMatch(t3)
 
4847
1       SIMPLE  t4      ALL     NULL    NULL    NULL    NULL    2       Using where
 
4848
SELECT *
 
4849
FROM t AS t1
 
4850
LEFT JOIN
 
4851
(t2
 
4852
LEFT JOIN t AS t3
 
4853
ON t3.a IN (SELECT a FROM t AS it)
 
4854
JOIN t4
 
4855
ON t4.a=100
 
4856
)
 
4857
ON TRUE
 
4858
WHERE t1.a IN (SELECT * FROM v AS it2);
 
4859
a       a       a       a
 
4860
1       NULL    NULL    NULL
 
4861
DROP TABLE t,t2,t4,v;
 
4862
# End of WL#5561
 
4863
#
 
4864
# Bug#48868: Left outer join in subquery causes segmentation fault in
 
4865
#            make_join_select.
 
4866
#
 
4867
CREATE TABLE t1 (i INTEGER);
 
4868
INSERT INTO t1 VALUES (1);
 
4869
INSERT INTO t1 VALUES (2);
 
4870
CREATE TABLE t2 (i INTEGER);
 
4871
INSERT INTO t2 VALUES(1);
 
4872
CREATE TABLE t3 (i INTEGER);
 
4873
INSERT INTO t3 VALUES (1);
 
4874
INSERT INTO t3 VALUES (2);
 
4875
SELECT * FROM t1 WHERE (t1.i) IN 
 
4876
(SELECT t2.i FROM t2 LEFT JOIN t3 ON t2.i=t3.i);
 
4877
i
 
4878
1
 
4879
DROP TABLE t1, t2, t3;
 
4880
 
 
4881
Bug#37899: Wrongly checked optimization prerequisite caused failed
 
4882
assertion.
 
4883
 
 
4884
CREATE TABLE t1 (
 
4885
`pk` int(11),
 
4886
`varchar_nokey` varchar(5)
 
4887
);
 
4888
INSERT INTO t1 VALUES
 
4889
(1,'qk'),(2,'j'),(3,'aew');
 
4890
SELECT *
 
4891
FROM t1
 
4892
WHERE varchar_nokey IN (
 
4893
SELECT
 
4894
varchar_nokey
 
4895
FROM
 
4896
t1
 
4897
) XOR pk = 30;
 
4898
pk      varchar_nokey
 
4899
1       qk
 
4900
2       j
 
4901
3       aew
 
4902
drop table t1;
 
4903
#
 
4904
# BUG#41842: Semi-join materialization strategy crashes when the upper query has HAVING
 
4905
#
 
4906
CREATE TABLE t1 (
 
4907
pk int(11) NOT NULL AUTO_INCREMENT,
 
4908
int_nokey int(11) NOT NULL,
 
4909
time_key time NOT NULL,
 
4910
datetime_key datetime NOT NULL,
 
4911
datetime_nokey datetime NOT NULL,
 
4912
varchar_key varchar(1) NOT NULL,
 
4913
varchar_nokey varchar(1) NOT NULL,
 
4914
PRIMARY KEY (pk),
 
4915
KEY time_key (time_key),
 
4916
KEY datetime_key (datetime_key),
 
4917
KEY varchar_key (varchar_key)
 
4918
);
 
4919
INSERT INTO t1 VALUES 
 
4920
(1,0, '00:16:10','2008-09-03 14:25:40','2008-09-03 14:25:40','h','h'),
 
4921
(2,7, '00:00:00','2001-01-13 00:00:00','2001-01-13 00:00:00','',''),
 
4922
(3,0, '00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','x','x'),
 
4923
(4,2, '16:29:24','2000-10-16 01:39:08','2000-10-16 01:39:08','w','w'),
 
4924
(5,1, '09:23:32','0000-00-00 00:00:00','0000-00-00 00:00:00','p','p'),
 
4925
(6,3, '00:00:00','2007-12-02 00:00:00','2007-12-02 00:00:00','o','o'),
 
4926
(7,3, '00:00:00','2008-09-11 00:00:00','2008-09-11 00:00:00','',''),
 
4927
(8,0, '13:59:04','0000-00-00 00:00:00','0000-00-00 00:00:00','s','s'),
 
4928
(9,7, '09:01:06','0000-00-00 00:00:00','0000-00-00 00:00:00','d','d'),
 
4929
(10,5,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','n','n'),
 
4930
(11,0,'21:06:46','0000-00-00 00:00:00','0000-00-00 00:00:00','o','o'),
 
4931
(12,2,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','',''),
 
4932
(13,6,'14:45:34','2003-07-28 02:34:08','2003-07-28 02:34:08','w','w'),
 
4933
(14,1,'15:04:12','0000-00-00 00:00:00','0000-00-00 00:00:00','o','o'),
 
4934
(15,0,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','x','x'),
 
4935
(16,0,'15:55:23','2004-03-17 00:32:27','2004-03-17 00:32:27','p','p'),
 
4936
(17,1,'16:30:00','2004-12-27 19:20:00','2004-12-27 19:20:00','d','d'),
 
4937
(18,0,'00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','h','h'),
 
4938
(19,0,'14:13:26','2008-11-09 05:53:48','2008-11-09 05:53:48','o','o'),
 
4939
(20,0,'00:00:00','2009-10-11 06:58:04','2009-10-11 06:58:04','k','k');
 
4940
CREATE TABLE t2 (
 
4941
pk int(11) NOT NULL AUTO_INCREMENT,
 
4942
int_nokey int(11) NOT NULL,
 
4943
time_key time NOT NULL,
 
4944
datetime_key datetime NOT NULL,
 
4945
datetime_nokey datetime NOT NULL,
 
4946
varchar_key varchar(1) NOT NULL,
 
4947
varchar_nokey varchar(1) NOT NULL,
 
4948
PRIMARY KEY (pk),
 
4949
KEY time_key (time_key),
 
4950
KEY datetime_key (datetime_key),
 
4951
KEY varchar_key (varchar_key)
 
4952
);
 
4953
INSERT INTO t2 VALUES 
 
4954
(10,0,'19:39:13','0000-00-00 00:00:00','0000-00-00 00:00:00','g','g'),
 
4955
(11,8,'03:43:53','0000-00-00 00:00:00','0000-00-00 00:00:00','b','b');
 
4956
SELECT OUTR.datetime_nokey AS X FROM t1 AS OUTR 
 
4957
WHERE 
 
4958
OUTR.varchar_nokey IN (SELECT 
 
4959
INNR . varchar_nokey AS Y 
 
4960
FROM t2 AS INNR 
 
4961
WHERE
 
4962
INNR . datetime_key >= INNR . time_key OR 
 
4963
INNR . pk = INNR . int_nokey  
 
4964
 
4965
AND OUTR . varchar_nokey <= 'w' 
 
4966
HAVING X > '2012-12-12';
 
4967
X
 
4968
drop table t1, t2;
 
4969
 
 
4970
Bug#46797 "Crash in fix_semijoin_strategies_for_picked_join_order 
 
4971
with semijoin=on"
 
4972
 
 
4973
CREATE TABLE t1 (
 
4974
varchar_key varchar(1) DEFAULT NULL,
 
4975
KEY varchar_key (varchar_key)
 
4976
);
 
4977
CREATE TABLE t2 (
 
4978
varchar_key varchar(1) DEFAULT NULL,
 
4979
KEY varchar_key (varchar_key)
 
4980
);
 
4981
INSERT INTO t2 VALUES
 
4982
(NULL),(NULL),(NULL),(NULL),('a'),('a'),('a'),('b'),('b'),('b'),('b'),('c'),
 
4983
('c'),('c'),('c'),('c'),('c'),('c'),('d'),('d'),('d'),('d'),('d'),('d'),('e'),
 
4984
('e'),('e'),('e'),('e'),('e'),('f'),('f'),('f'),('g'),('g'),('h'),('h'),('h'),
 
4985
('h'),('i'),('j'),('j'),('j'),('k'),('k'),('l'),('l'),('m'),('m'),('m'),('m'),
 
4986
('n'),('n'),('n'),('o'),('o'),('o'),('p'),('p'),('p'),('q'),('q'),('q'),('r'),
 
4987
('r'),('r'),('r'),('s'),('s'),('s'),('s'),('t'),('t'),('t'),('t'),('u'),('u'),
 
4988
('u'),('u'),('v'),('v'),('v'),('v'),('w'),('w'),('w'),('w'),('w'),('w'),('x'),
 
4989
('x'),('x'),('y'),('y'),('y'),('y'),('z'),('z'),('z'),('z');
 
4990
CREATE TABLE t3 (
 
4991
varchar_key varchar(1) DEFAULT NULL,
 
4992
KEY varchar_key (varchar_key)
 
4993
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
4994
INSERT INTO t3 VALUES
 
4995
(NULL),('c'),('d'),('e'),('f'),('h'),('j'),('k'),('k'),('m'),('m'),('m'),
 
4996
('n'),('o'),('r'),('t'),('t'),('u'),('w'),('y');
 
4997
SELECT varchar_key FROM t3 
 
4998
WHERE (SELECT varchar_key FROM t3 
 
4999
WHERE (varchar_key,varchar_key) 
 
5000
IN (SELECT t1.varchar_key, t2 .varchar_key 
 
5001
FROM t1 RIGHT JOIN t2 ON t1.varchar_key  
 
5002
)  
 
5003
);
 
5004
varchar_key
 
5005
DROP TABLE t1, t2, t3;
 
5006
#
 
5007
# Bug#46556 Returning incorrect, empty results for some IN subqueries 
 
5008
#           w/semijoin=on
 
5009
#
 
5010
CREATE TABLE t0 (
 
5011
pk INTEGER,
 
5012
vkey VARCHAR(1),
 
5013
vnokey VARCHAR(1),
 
5014
PRIMARY KEY (pk),
 
5015
KEY vkey(vkey)
 
5016
);
 
5017
INSERT INTO t0 
 
5018
VALUES (1,'g','g'), (2,'v','v'), (3,'t','t'), (4,'u','u'), (5,'n','n');
 
5019
EXPLAIN EXTENDED SELECT vkey FROM t0 WHERE pk IN 
 
5020
(SELECT t1.pk FROM t0 t1 JOIN t0 t2 ON t2.vkey = t1.vnokey);
 
5021
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
5022
1       SIMPLE  t0      ALL     PRIMARY NULL    NULL    NULL    5       100.00  NULL
 
5023
1       SIMPLE  t1      eq_ref  PRIMARY PRIMARY 4       test.t0.pk      1       100.00  Using where; Using join buffer (Batched Key Access)
 
5024
1       SIMPLE  t2      ref     vkey    vkey    4       test.t1.vnokey  2       100.00  Using index; FirstMatch(t1)
 
5025
Warnings:
 
5026
Note    1003    /* select#1 */ select `test`.`t0`.`vkey` AS `vkey` from `test`.`t0` `t1` semi join (`test`.`t0` `t2`) join `test`.`t0` where ((`test`.`t2`.`vkey` = `test`.`t1`.`vnokey`) and (`test`.`t1`.`pk` = `test`.`t0`.`pk`))
 
5027
SELECT vkey FROM t0 WHERE pk IN 
 
5028
(SELECT t1.pk FROM t0 t1 JOIN t0 t2 ON t2.vkey = t1.vnokey);
 
5029
vkey
 
5030
g
 
5031
v
 
5032
t
 
5033
u
 
5034
n
 
5035
DROP TABLE t0;
 
5036
# End of bug#46556
 
5037
 
 
5038
Bug#48834: Procedure with view + subquery + semijoin=on 
 
5039
crashes on second call.
 
5040
 
 
5041
CREATE TABLE t1 ( t1field integer, primary key (t1field));
 
5042
CREATE TABLE t2 ( t2field integer, primary key (t2field));
 
5043
CREATE VIEW v1 AS 
 
5044
SELECT t1field as v1field
 
5045
FROM t1 A 
 
5046
WHERE A.t1field IN (SELECT t1field FROM t2 );
 
5047
CREATE VIEW v2 AS 
 
5048
SELECT t2field as v2field
 
5049
FROM t2 A 
 
5050
WHERE A.t2field IN (SELECT t2field FROM t2 );
 
5051
CREATE PROCEDURE p1 () 
 
5052
BEGIN 
 
5053
SELECT v1field
 
5054
FROM v1 
 
5055
WHERE v1field IN ( SELECT v2field as vf_inner FROM v2 );
 
5056
END|
 
5057
INSERT INTO t1 VALUES (1),(2),(3);
 
5058
INSERT INTO t2 VALUES (2),(3),(4);
 
5059
CALL p1;
 
5060
v1field
 
5061
2
 
5062
3
 
5063
CALL p1;
 
5064
v1field
 
5065
2
 
5066
3
 
5067
DROP TABLE t1,t2;
 
5068
DROP VIEW v1,v2;
 
5069
DROP PROCEDURE p1;
 
5070
# End of BUG#48834
 
5071
#
 
5072
# Bug#46692 "Crash occurring on queries with nested FROM subqueries 
 
5073
# using materialization."
 
5074
#
 
5075
CREATE TABLE t1 (
 
5076
pk INTEGER PRIMARY KEY,
 
5077
int_key INTEGER,
 
5078
KEY int_key(int_key)
 
5079
);
 
5080
INSERT INTO t1 VALUES (10,186),(11,NULL),(12,2),(13,3),(14,0),(15,133),(16,1);
 
5081
CREATE TABLE t2 (
 
5082
pk INTEGER PRIMARY KEY,
 
5083
int_key INTEGER,
 
5084
KEY int_key(int_key)
 
5085
);
 
5086
INSERT INTO t2 VALUES (1,7),(2,2);
 
5087
SELECT * FROM t1 WHERE (140, 4) IN 
 
5088
(SELECT t2.int_key, t2 .pk FROM t2 STRAIGHT_JOIN t1 ON t2.int_key);
 
5089
pk      int_key
 
5090
DROP TABLE t1, t2;
 
5091
#
 
5092
# Bug#42353 "SELECT ... WHERE oe IN (SELECT w/ LEFT JOIN) query
 
5093
# causes crash."
 
5094
#
 
5095
CREATE TABLE t1 (
 
5096
pk INTEGER PRIMARY KEY,
 
5097
int_nokey INTEGER,
 
5098
int_key INTEGER,
 
5099
date_key DATE,
 
5100
datetime_nokey DATETIME,
 
5101
varchar_nokey VARCHAR(1)
 
5102
);
 
5103
CREATE TABLE t2 (
 
5104
date_nokey DATE
 
5105
);
 
5106
CREATE TABLE t3 (
 
5107
pk INTEGER PRIMARY KEY,
 
5108
int_nokey INTEGER,
 
5109
date_key date,
 
5110
varchar_key VARCHAR(1),
 
5111
varchar_nokey VARCHAR(1),
 
5112
KEY date_key (date_key)
 
5113
);
 
5114
SELECT date_key FROM t1
 
5115
WHERE (int_key, int_nokey)
 
5116
IN (SELECT  t3.int_nokey, t3.pk
 
5117
FROM t2 LEFT JOIN t3 ON (t2.date_nokey < t3.date_key) 
 
5118
WHERE t3.varchar_key <= t3.varchar_nokey OR t3.int_nokey <= t3.pk
 
5119
)
 
5120
AND (varchar_nokey <> 'f' OR NOT int_key < 7);
 
5121
date_key
 
5122
#
 
5123
# Bug#45933 "Crash in optimize_semijoin_nests on JOIN in subquery 
 
5124
# + AND in outer query".
 
5125
#
 
5126
INSERT INTO t1 VALUES (10,7,5,'2009-06-16','2002-04-10 14:25:30','w'),
 
5127
(11,7,0,'0000-00-00','0000-00-00 00:00:00','s'), 
 
5128
(12,4,0,'2003-07-14','2006-09-14 04:01:02','y'), 
 
5129
(13,0,4,'2002-07-25','0000-00-00 00:00:00','c'), 
 
5130
(14,1,8,'2007-07-03','0000-00-00 00:00:00','q'), 
 
5131
(15,6,5,'2001-11-12','0000-00-00 00:00:00',''), 
 
5132
(16,2,9,'0000-00-00','0000-00-00 00:00:00','j'), 
 
5133
(29,9,1,'0000-00-00','2003-08-11 00:00:00','m');
 
5134
INSERT INTO t3 VALUES (1,9,'0000-00-00','b','b'),
 
5135
(2,2,'2002-09-17','h','h');
 
5136
SELECT t1.varchar_nokey FROM t1 JOIN t3 ON t1.datetime_nokey
 
5137
WHERE t1.varchar_nokey 
 
5138
IN (SELECT varchar_nokey FROM t1 
 
5139
WHERE (pk) 
 
5140
IN (SELECT t3.int_nokey
 
5141
FROM t3 LEFT JOIN t1 ON t1.varchar_nokey
 
5142
WHERE t3.date_key BETWEEN '2008-06-07' AND '2006-06-26'
 
5143
           )  
 
5144
);
 
5145
varchar_nokey
 
5146
DROP TABLE t1, t2, t3;
 
5147
#
 
5148
# Bug#45219 "Crash on SELECT DISTINCT query containing a  
 
5149
# LEFT JOIN in subquery"
 
5150
#
 
5151
CREATE TABLE t1 (
 
5152
pk INTEGER NOT NULL,
 
5153
int_nokey INTEGER NOT NULL,
 
5154
datetime_key DATETIME NOT NULL,
 
5155
varchar_key VARCHAR(1) NOT NULL,
 
5156
PRIMARY KEY (pk),
 
5157
KEY datetime_key (datetime_key),
 
5158
KEY varchar_key (varchar_key)
 
5159
);
 
5160
INSERT INTO t1 VALUES
 
5161
(1,9,'0000-00-00 00:00:00','p'),(2,0,'2002-02-09 07:38:13','v'),
 
5162
(3,8,'2001-05-03 12:08:14','t'),(4,3,'0000-00-00 00:00:00','u'),
 
5163
(5,7,'2009-07-28 03:43:30','n'),(6,0,'2009-08-04 00:00:00','l'),
 
5164
(7,1,'0000-00-00 00:00:00','h'),(8,9,'0000-00-00 00:00:00','u'),
 
5165
(9,0,'2005-08-02 17:16:54','n'),(10,9,'2002-12-21 00:00:00','j'),
 
5166
(11,0,'2005-08-15 12:37:35','k'),(12,5,'0000-00-00 00:00:00','e'),
 
5167
(13,0,'2006-03-10 00:00:00','i'),(14,8,'2005-05-16 11:02:36','u'),
 
5168
(15,8,'2008-11-02 00:00:00','n'),(16,5,'2006-03-15 00:00:00','b'),
 
5169
(17,1,'0000-00-00 00:00:00','x'),(18,7,'0000-00-00 00:00:00',''),
 
5170
(19,0,'2008-12-17 20:15:40','q'),(20,9,'0000-00-00 00:00:00','u');
 
5171
CREATE TABLE t2 LIKE t1;
 
5172
INSERT INTO t2 VALUES 
 
5173
(10,0,'2006-07-07 07:26:28','q'),(11,5,'2002-09-23 00:00:00','m'),
 
5174
(12,7,'0000-00-00 00:00:00','j'),(13,1,'2006-06-07 00:00:00','z'),
 
5175
(14,8,'2000-09-16 12:15:34','a'),(15,2,'2007-08-05 15:47:52',''),
 
5176
(16,1,'0000-00-00 00:00:00','e'),(17,8,'2005-12-02 19:34:26','t'),
 
5177
(18,5,'0000-00-00 00:00:00','q'),(19,4,'0000-00-00 00:00:00','b'),
 
5178
(20,5,'2007-12-28 00:00:00','w'),(21,3,'2004-08-02 11:48:43','m'),
 
5179
(22,0,'0000-00-00 00:00:00','x'),(23,8,'2004-04-19 12:18:43',''),
 
5180
(24,0,'2009-04-27 00:00:00','w'),(25,4,'2006-10-20 14:52:15','x'),
 
5181
(26,0,'0000-00-00 00:00:00','e'),(27,0,'2002-03-22 11:48:37','e'),
 
5182
(28,2,'0000-00-00 00:00:00','p'),(29,0,'2001-01-04 03:55:07','x');
 
5183
CREATE TABLE t3 LIKE t1;
 
5184
INSERT INTO t3 VALUES
 
5185
(10,8,'2007-08-19 08:08:38','i'),(11,0,'2000-05-21 03:51:51','');
 
5186
SELECT DISTINCT datetime_key FROM t1
 
5187
WHERE (int_nokey, pk)  
 
5188
IN (SELECT t3.pk, t3.pk FROM t2 LEFT JOIN t3 ON t3.varchar_key)  
 
5189
AND pk = 9;
 
5190
datetime_key
 
5191
DROP TABLE t1, t2, t3;
 
5192
#
 
5193
# Bug#46550 Azalea returning duplicate results for some IN subqueries
 
5194
# w/ semijoin=on
 
5195
#
 
5196
DROP TABLE IF EXISTS t0, t1, t2;
 
5197
CREATE TABLE t0 (
 
5198
int_key int(11) DEFAULT NULL,
 
5199
varchar_key varchar(1) DEFAULT NULL,
 
5200
varchar_nokey varchar(1) DEFAULT NULL,
 
5201
KEY int_key (int_key),
 
5202
KEY varchar_key (varchar_key,int_key)
 
5203
);
 
5204
INSERT INTO t0 VALUES
 
5205
(1,'m','m'),
 
5206
(40,'h','h'),
 
5207
(1,'r','r'),
 
5208
(1,'h','h'),
 
5209
(9,'x','x'),
 
5210
(NULL,'q','q'),
 
5211
(NULL,'k','k'),
 
5212
(7,'l','l'),
 
5213
(182,'k','k'),
 
5214
(202,'a','a'),
 
5215
(7,'x','x'),
 
5216
(6,'j','j'),
 
5217
(119,'z','z'),
 
5218
(4,'d','d'),
 
5219
(5,'h','h'),
 
5220
(1,'u','u'),
 
5221
(3,'q','q'),
 
5222
(7,'a','a'),
 
5223
(3,'e','e'),
 
5224
(6,'l','l');
 
5225
CREATE TABLE t1 (
 
5226
int_key int(11) DEFAULT NULL,
 
5227
varchar_key varchar(1) DEFAULT NULL,
 
5228
varchar_nokey varchar(1) DEFAULT NULL,
 
5229
KEY int_key (int_key),
 
5230
KEY varchar_key (varchar_key,int_key)
 
5231
);
 
5232
INSERT INTO t1 VALUES (7,NULL,NULL),(4,'x','x');
 
5233
CREATE TABLE t2 (
 
5234
int_key int(11) DEFAULT NULL,
 
5235
varchar_key varchar(1) DEFAULT NULL,
 
5236
varchar_nokey varchar(1) DEFAULT NULL,
 
5237
KEY int_key (int_key),
 
5238
KEY varchar_key (varchar_key,int_key)
 
5239
);
 
5240
INSERT INTO t2 VALUES (123,NULL,NULL);
 
5241
SELECT int_key  
 
5242
FROM t0  
 
5243
WHERE varchar_nokey  IN (  
 
5244
SELECT t1 .varchar_key  from t1
 
5245
);
 
5246
int_key
 
5247
9
 
5248
7
 
5249
SELECT t0.int_key  
 
5250
FROM t0
 
5251
WHERE t0.varchar_nokey  IN (  
 
5252
SELECT t1_1 .varchar_key  
 
5253
FROM t1 AS t1_1  JOIN t1 AS t1_2 ON t1_1 .int_key
 
5254
);
 
5255
int_key
 
5256
9
 
5257
7
 
5258
EXPLAIN
 
5259
SELECT t0.int_key  
 
5260
FROM t0
 
5261
WHERE t0.varchar_nokey  IN (  
 
5262
SELECT t1_1 .varchar_key  
 
5263
FROM t1 AS t1_1  JOIN t1 AS t1_2 ON t1_1 .int_key
 
5264
);
 
5265
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5266
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
5267
1       SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    20      Using where
 
5268
2       MATERIALIZED    t1_1    index   varchar_key     varchar_key     9       NULL    2       Using where; Using index
 
5269
2       MATERIALIZED    t1_2    index   NULL    int_key 5       NULL    2       Using index
 
5270
SELECT t0.int_key  
 
5271
FROM t0, t2
 
5272
WHERE t0.varchar_nokey  IN (  
 
5273
SELECT t1_1 .varchar_key  
 
5274
FROM t1 AS t1_1  JOIN t1 AS t1_2 ON t1_1 .int_key  
 
5275
);
 
5276
int_key
 
5277
9
 
5278
7
 
5279
EXPLAIN
 
5280
SELECT t0.int_key  
 
5281
FROM t0, t2
 
5282
WHERE t0.varchar_nokey  IN (  
 
5283
SELECT t1_1 .varchar_key  
 
5284
FROM t1 AS t1_1  JOIN t1 AS t1_2 ON t1_1 .int_key  
 
5285
);
 
5286
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5287
1       SIMPLE  t2      system  NULL    NULL    NULL    NULL    1       NULL
 
5288
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
5289
1       SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    20      Using where
 
5290
2       MATERIALIZED    t1_1    index   varchar_key     varchar_key     9       NULL    2       Using where; Using index
 
5291
2       MATERIALIZED    t1_2    index   NULL    int_key 5       NULL    2       Using index
 
5292
DROP TABLE t0, t1, t2;
 
5293
# End of bug#46550
 
5294
 
 
5295
Bug #48073 Subquery on char columns from view crashes Mysql
 
5296
 
 
5297
DROP TABLE IF EXISTS t1, t2;
 
5298
DROP VIEW IF EXISTS v1;
 
5299
CREATE TABLE t1 (
 
5300
city VARCHAR(50) NOT NULL,
 
5301
country_id SMALLINT UNSIGNED NOT NULL
 
5302
);
 
5303
INSERT INTO t1 VALUES 
 
5304
('Batna',2),
 
5305
('Bchar',2),
 
5306
('Skikda',2),
 
5307
('Tafuna',3),
 
5308
('Algeria',2) ;
 
5309
CREATE TABLE t2 (
 
5310
country_id SMALLINT UNSIGNED NOT NULL,
 
5311
country VARCHAR(50) NOT NULL
 
5312
);
 
5313
INSERT INTO t2 VALUES
 
5314
(2,'Algeria'),
 
5315
(3,'American Samoa') ;
 
5316
CREATE VIEW v1 AS 
 
5317
SELECT country_id, country 
 
5318
FROM t2
 
5319
WHERE LEFT(country,1) = "A" 
 
5320
;
 
5321
SELECT city, country_id
 
5322
FROM t1
 
5323
WHERE city IN (
 
5324
SELECT country 
 
5325
FROM t2
 
5326
WHERE LEFT(country, 1) = "A" 
 
5327
);
 
5328
city    country_id
 
5329
Algeria 2
 
5330
SELECT city, country_id
 
5331
FROM t1
 
5332
WHERE city IN (
 
5333
SELECT country 
 
5334
FROM v1
 
5335
);
 
5336
city    country_id
 
5337
Algeria 2
 
5338
drop table t1, t2;
 
5339
drop view v1;
 
5340
# End of bug#48073
 
5341
 
 
5342
Bug#49097 subquery with view generates wrong result with
 
5343
non-prepared statement
 
5344
 
 
5345
DROP TABLE IF EXISTS t1, t2;
 
5346
DROP VIEW IF EXISTS v1;
 
5347
CREATE TABLE t1 (
 
5348
city VARCHAR(50) NOT NULL,
 
5349
country_id SMALLINT UNSIGNED NOT NULL
 
5350
);
 
5351
INSERT INTO t1 VALUES 
 
5352
('Batna',2),
 
5353
('Bchar',2),
 
5354
('Skikda',2),
 
5355
('Tafuna',3),
 
5356
('Algeria',2) ;
 
5357
CREATE TABLE t2 (
 
5358
country_id SMALLINT UNSIGNED NOT NULL,
 
5359
country VARCHAR(50) NOT NULL
 
5360
);
 
5361
INSERT INTO t2 VALUES
 
5362
(2,'Algeria'),
 
5363
(3,'XAmerican Samoa') ;
 
5364
CREATE VIEW v1 AS 
 
5365
SELECT country_id, country 
 
5366
FROM t2
 
5367
WHERE LEFT(country,1) = "A" 
 
5368
;
 
5369
SELECT city, country_id
 
5370
FROM t1
 
5371
WHERE country_id IN (
 
5372
SELECT country_id 
 
5373
FROM t2
 
5374
WHERE LEFT(country,1) = "A" 
 
5375
);
 
5376
city    country_id
 
5377
Batna   2
 
5378
Bchar   2
 
5379
Skikda  2
 
5380
Algeria 2
 
5381
SELECT city, country_id
 
5382
FROM t1
 
5383
WHERE country_id IN (
 
5384
SELECT country_id 
 
5385
FROM v1
 
5386
);
 
5387
city    country_id
 
5388
Batna   2
 
5389
Bchar   2
 
5390
Skikda  2
 
5391
Algeria 2
 
5392
PREPARE stmt FROM
 
5393
"
 
5394
SELECT city, country_id
 
5395
FROM t1
 
5396
WHERE country_id IN (
 
5397
  SELECT country_id 
 
5398
  FROM v1
 
5399
);
 
5400
";
 
5401
execute stmt;
 
5402
city    country_id
 
5403
Batna   2
 
5404
Bchar   2
 
5405
Skikda  2
 
5406
Algeria 2
 
5407
deallocate prepare stmt;
 
5408
drop table t1, t2;
 
5409
drop view v1;
 
5410
# End of Bug#49097
 
5411
 
5412
# Bug#49198 Wrong result for second call of procedure
 
5413
#           with view in subselect.
 
5414
 
5415
CREATE TABLE t1 (t1field integer, primary key (t1field));
 
5416
CREATE TABLE t2 (t2field integer, primary key (t2field));
 
5417
CREATE TABLE t3 (t3field integer, primary key (t3field));
 
5418
CREATE VIEW v2 AS SELECT * FROM t2;
 
5419
CREATE VIEW v3 AS SELECT * FROM t3;
 
5420
INSERT INTO t1 VALUES(1),(2);
 
5421
INSERT INTO t2 VALUES(1),(2);
 
5422
INSERT INTO t3 VALUES(1),(2);
 
5423
PREPARE stmt FROM
 
5424
"
 
5425
SELECT t1field
 
5426
FROM t1
 
5427
WHERE t1field IN (SELECT * FROM v2);
 
5428
";
 
5429
EXECUTE stmt;
 
5430
t1field
 
5431
1
 
5432
2
 
5433
EXECUTE stmt;
 
5434
t1field
 
5435
1
 
5436
2
 
5437
PREPARE stmt FROM
 
5438
"
 
5439
EXPLAIN
 
5440
SELECT t1field
 
5441
FROM t1
 
5442
WHERE t1field IN (SELECT * FROM v2)
 
5443
  AND t1field IN (SELECT * FROM v3)
 
5444
";
 
5445
EXECUTE stmt;
 
5446
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5447
1       SIMPLE  t1      index   PRIMARY PRIMARY 4       NULL    2       Using index
 
5448
1       SIMPLE  t2      eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5449
1       SIMPLE  t3      eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5450
EXECUTE stmt;
 
5451
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5452
1       SIMPLE  t1      index   PRIMARY PRIMARY 4       NULL    2       Using index
 
5453
1       SIMPLE  t2      eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5454
1       SIMPLE  t3      eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5455
DROP TABLE t1, t2, t3;
 
5456
DROP VIEW v2, v3;
 
5457
# End of Bug#49198
 
5458
 
5459
# Bug#48623 Multiple subqueries are optimized incorrectly
 
5460
 
5461
CREATE TABLE ot(val VARCHAR(10));
 
5462
CREATE TABLE it1(val VARCHAR(10));
 
5463
CREATE TABLE it2(val VARCHAR(10));
 
5464
INSERT INTO ot  VALUES('aaa'), ('bbb'), ('eee'), ('mmm'), ('ppp');
 
5465
INSERT INTO it1 VALUES('aaa'), ('aaa'), ('bbb'), ('eee'), ('mmm'), ('ppp');
 
5466
INSERT INTO it2 VALUES('aaa'), ('bbb'), ('eee'), ('mmm'), ('ppp');
 
5467
EXPLAIN
 
5468
SELECT *
 
5469
FROM ot
 
5470
WHERE ot.val IN (SELECT it1.val FROM it1
 
5471
WHERE  it1.val LIKE 'a%' OR it1.val LIKE 'e%')
 
5472
AND ot.val IN (SELECT it2.val FROM it2
 
5473
WHERE  it2.val LIKE 'a%' OR it2.val LIKE 'e%');
 
5474
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5475
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    5       Using where
 
5476
1       SIMPLE  <subquery3>     eq_ref  <auto_key>      <auto_key>      13      test.ot.val     1       NULL
 
5477
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      13      test.ot.val     1       NULL
 
5478
3       MATERIALIZED    it2     ALL     NULL    NULL    NULL    NULL    5       Using where
 
5479
2       MATERIALIZED    it1     ALL     NULL    NULL    NULL    NULL    6       Using where
 
5480
SELECT *
 
5481
FROM ot
 
5482
WHERE ot.val IN (SELECT it1.val FROM it1
 
5483
WHERE  it1.val LIKE 'a%' OR it1.val LIKE 'e%')
 
5484
AND ot.val IN (SELECT it2.val FROM it2
 
5485
WHERE  it2.val LIKE 'a%' OR it2.val LIKE 'e%');
 
5486
val
 
5487
aaa
 
5488
eee
 
5489
DROP TABLE ot;
 
5490
DROP TABLE it1;
 
5491
DROP TABLE it2;
 
5492
# End of Bug#48623
 
5493
 
5494
# Bug #51487 Assertion failure when semi-join flattening occurs
 
5495
#            for a subquery in HAVING 
 
5496
 
5497
CREATE TABLE t1 (a INT, b INT);
 
5498
INSERT INTO t1 VALUES (1,10),(2,11),(1,13);
 
5499
CREATE TABLE t2 AS SELECT * FROM t1;
 
5500
CREATE TABLE t3 AS SELECT * FROM t1;
 
5501
SELECT COUNT(*) FROM t1
 
5502
GROUP BY t1.a 
 
5503
HAVING t1.a IN (SELECT t3.a FROM t3
 
5504
WHERE t3.b IN (SELECT b FROM t2 WHERE t2.a=t1.a));
 
5505
COUNT(*)
 
5506
2
 
5507
1
 
5508
DROP TABLE t1, t2, t3;
 
5509
# End of Bug#51487
 
5510
 
5511
# BUG#38075: Wrong result: rows matching a subquery with outer join not returned
 
5512
 
5513
DROP TABLE IF EXISTS ot1, it1, it2;
 
5514
CREATE TABLE it2 (
 
5515
int_key int(11) NOT NULL,
 
5516
datetime_key datetime NOT NULL,
 
5517
KEY int_key (int_key),
 
5518
KEY datetime_key (datetime_key)
 
5519
);
 
5520
INSERT INTO it2 VALUES
 
5521
(5,'2002-04-10 14:25:30'), (0,'0000-00-00 00:00:00'),
 
5522
(0,'2006-09-14 04:01:02'), (4,'0000-00-00 00:00:00'),
 
5523
(8,'0000-00-00 00:00:00'), (5,'0000-00-00 00:00:00'),
 
5524
(9,'0000-00-00 00:00:00'), (8,'2007-04-01 11:04:17'),
 
5525
(1,'0000-00-00 00:00:00'), (7,'2009-01-12 00:00:00'),
 
5526
(0,'2009-06-05 00:00:00'), (3,'2006-02-14 18:06:35'),
 
5527
(5,'2006-02-21 07:08:16'), (0,'0000-00-00 00:00:00'),
 
5528
(7,'0000-00-00 00:00:00'), (0,'0000-00-00 00:00:00'),
 
5529
(0,'2007-02-13 00:00:00'), (1,'0000-00-00 00:00:00'),
 
5530
(0,'0000-00-00 00:00:00'), (1,'2003-08-11 00:00:00');
 
5531
CREATE TABLE ot1 (
 
5532
int_nokey int(11) NOT NULL,
 
5533
int_key int(11) NOT NULL,
 
5534
KEY int_key (int_key)
 
5535
);
 
5536
INSERT INTO ot1 VALUES
 
5537
(5,0), (3,0), (0,2), (3,0), (1,3), (0,0), (1,7), (7,0), (1,7), (0,7),
 
5538
(0,9), (8,2), (4,4), (9,3), (0,9), (2,5), (0,5), (8,0), (5,8), (1,5);
 
5539
CREATE TABLE it1 (
 
5540
int_nokey int(11) NOT NULL,
 
5541
int_key int(11) NOT NULL,
 
5542
KEY int_key (int_key)
 
5543
);
 
5544
INSERT INTO it1 VALUES
 
5545
(9,5), (0,4);
 
5546
SELECT int_key FROM ot1
 
5547
WHERE int_nokey IN (SELECT it2.int_key
 
5548
FROM it1 LEFT JOIN it2 ON it2.datetime_key);
 
5549
int_key
 
5550
0
 
5551
0
 
5552
0
 
5553
0
 
5554
0
 
5555
0
 
5556
2
 
5557
2
 
5558
3
 
5559
5
 
5560
5
 
5561
7
 
5562
7
 
5563
7
 
5564
8
 
5565
9
 
5566
9
 
5567
EXPLAIN
 
5568
SELECT int_key FROM ot1
 
5569
WHERE int_nokey IN (SELECT it2.int_key
 
5570
FROM it1 LEFT JOIN it2 ON it2.datetime_key);
 
5571
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5572
1       SIMPLE  it1     index   NULL    int_key 4       NULL    2       Using index; Start temporary
 
5573
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    20      NULL
 
5574
1       SIMPLE  it2     ref     int_key int_key 4       test.ot1.int_nokey      2       Using where; End temporary; Using join buffer (Batched Key Access)
 
5575
DROP TABLE ot1, it1, it2;
 
5576
# End of BUG#38075
 
5577
 
5578
# BUG#50089: Second call of procedure with view in subselect crashes server
 
5579
 
5580
CREATE TABLE t1(t1field INTEGER, PRIMARY KEY(t1field));
 
5581
CREATE VIEW v1 AS 
 
5582
SELECT t1field AS v1field
 
5583
FROM t1 a
 
5584
WHERE a.t1field IN (SELECT t1field FROM t1);
 
5585
INSERT INTO t1 VALUES(1),(2);
 
5586
SELECT t1field
 
5587
FROM t1
 
5588
WHERE t1field IN (SELECT v1field FROM v1);
 
5589
t1field
 
5590
1
 
5591
2
 
5592
EXPLAIN
 
5593
SELECT t1field
 
5594
FROM t1
 
5595
WHERE t1field IN (SELECT v1field FROM v1);
 
5596
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5597
1       SIMPLE  t1      index   PRIMARY PRIMARY 4       NULL    2       Using index
 
5598
1       SIMPLE  a       eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5599
1       SIMPLE  t1      eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5600
SELECT t1.t1field
 
5601
FROM t1 LEFT JOIN t1 AS t2 ON t1.t1field IN (SELECT v1field FROM v1);
 
5602
t1field
 
5603
1
 
5604
1
 
5605
2
 
5606
2
 
5607
EXPLAIN
 
5608
SELECT t1field
 
5609
FROM t1
 
5610
WHERE t1field IN (SELECT v1field FROM v1);
 
5611
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5612
1       SIMPLE  t1      index   PRIMARY PRIMARY 4       NULL    2       Using index
 
5613
1       SIMPLE  a       eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5614
1       SIMPLE  t1      eq_ref  PRIMARY PRIMARY 4       test.t1.t1field 1       Using index
 
5615
CREATE PROCEDURE p1() 
 
5616
BEGIN 
 
5617
SELECT t1field
 
5618
FROM t1
 
5619
WHERE t1field IN (SELECT v1field FROM v1);
 
5620
END|
 
5621
CALL p1;
 
5622
t1field
 
5623
1
 
5624
2
 
5625
CALL p1;
 
5626
t1field
 
5627
1
 
5628
2
 
5629
PREPARE stmt FROM
 
5630
"
 
5631
SELECT t1field
 
5632
FROM t1
 
5633
WHERE t1field IN (SELECT v1field FROM v1);
 
5634
";
 
5635
EXECUTE stmt;
 
5636
t1field
 
5637
1
 
5638
2
 
5639
EXECUTE stmt;
 
5640
t1field
 
5641
1
 
5642
2
 
5643
DROP PROCEDURE p1;
 
5644
DROP VIEW v1;
 
5645
DROP TABLE t1;
 
5646
# End of BUG#50089
 
5647
#
 
5648
# Bug#45191: Incorrectly initialized semi-join led to a wrong result.
 
5649
#
 
5650
CREATE TABLE STAFF (EMPNUM   CHAR(3) NOT NULL,
 
5651
EMPNAME  CHAR(20), GRADE DECIMAL(4), CITY CHAR(15));
 
5652
CREATE TABLE PROJ (PNUM CHAR(3) NOT NULL,
 
5653
PNAME    CHAR(20), PTYPE CHAR(6),
 
5654
BUDGET   DECIMAL(9),
 
5655
CITY     CHAR(15));
 
5656
CREATE TABLE WORKS (EMPNUM CHAR(3) NOT NULL,
 
5657
PNUM CHAR(3) NOT NULL, HOURS DECIMAL(5));
 
5658
INSERT INTO STAFF VALUES ('E1','Alice',12,'Deale');
 
5659
INSERT INTO STAFF VALUES ('E2','Betty',10,'Vienna');
 
5660
INSERT INTO STAFF VALUES ('E3','Carmen',13,'Vienna');
 
5661
INSERT INTO STAFF VALUES ('E4','Don',12,'Deale');
 
5662
INSERT INTO STAFF VALUES ('E5','Ed',13,'Akron');
 
5663
INSERT INTO PROJ VALUES  ('P1','MXSS','Design',10000,'Deale');
 
5664
INSERT INTO PROJ VALUES  ('P2','CALM','Code',30000,'Vienna');
 
5665
INSERT INTO PROJ VALUES  ('P3','SDP','Test',30000,'Tampa');
 
5666
INSERT INTO PROJ VALUES  ('P4','SDP','Design',20000,'Deale');
 
5667
INSERT INTO PROJ VALUES  ('P5','IRM','Test',10000,'Vienna');
 
5668
INSERT INTO PROJ VALUES  ('P6','PAYR','Design',50000,'Deale');
 
5669
INSERT INTO WORKS VALUES  ('E1','P1',40);
 
5670
INSERT INTO WORKS VALUES  ('E1','P2',20);
 
5671
INSERT INTO WORKS VALUES  ('E1','P3',80);
 
5672
INSERT INTO WORKS VALUES  ('E1','P4',20);
 
5673
INSERT INTO WORKS VALUES  ('E1','P5',12);
 
5674
INSERT INTO WORKS VALUES  ('E1','P6',12);
 
5675
INSERT INTO WORKS VALUES  ('E2','P1',40);
 
5676
INSERT INTO WORKS VALUES  ('E2','P2',80);
 
5677
INSERT INTO WORKS VALUES  ('E3','P2',20);
 
5678
INSERT INTO WORKS VALUES  ('E4','P2',20);
 
5679
INSERT INTO WORKS VALUES  ('E4','P4',40);
 
5680
INSERT INTO WORKS VALUES  ('E4','P5',80);
 
5681
explain SELECT EMPNUM, EMPNAME
 
5682
FROM STAFF
 
5683
WHERE EMPNUM IN
 
5684
(SELECT EMPNUM  FROM WORKS
 
5685
WHERE PNUM IN
 
5686
(SELECT PNUM  FROM PROJ));
 
5687
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5688
1       SIMPLE  STAFF   ALL     NULL    NULL    NULL    NULL    5       Using where
 
5689
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.STAFF.EMPNUM       1       NULL
 
5690
2       MATERIALIZED    PROJ    ALL     NULL    NULL    NULL    NULL    6       NULL
 
5691
2       MATERIALIZED    WORKS   ALL     NULL    NULL    NULL    NULL    12      Using where
 
5692
SELECT EMPNUM, EMPNAME
 
5693
FROM STAFF
 
5694
WHERE EMPNUM IN
 
5695
(SELECT EMPNUM  FROM WORKS
 
5696
WHERE PNUM IN
 
5697
(SELECT PNUM  FROM PROJ));
 
5698
EMPNUM  EMPNAME
 
5699
E1      Alice
 
5700
E2      Betty
 
5701
E3      Carmen
 
5702
E4      Don
 
5703
drop table STAFF,WORKS,PROJ;
 
5704
# End of bug#45191
 
5705
#  
 
5706
# BUG#36896: Server crash on SELECT FROM DUAL
 
5707
 
5708
create table t1 (a int);
 
5709
select 1 as res from dual where (1) in (select * from t1);
 
5710
res
 
5711
drop table t1;
 
5712
 
 
5713
BUG#40118 Crash when running Batched Key Access and requiring one match for each key
 
5714
 
 
5715
create table t0(a int);
 
5716
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
5717
create table t1 (a int, key(a));
 
5718
insert into t1 select * from t0;
 
5719
alter table t1 add b int not null, add filler char(200);
 
5720
insert into t1 select * from t1;
 
5721
insert into t1 select * from t1;
 
5722
select * from t0 where t0.a in (select t1.a from t1 where t1.b=0);
 
5723
a
 
5724
0
 
5725
1
 
5726
2
 
5727
3
 
5728
4
 
5729
5
 
5730
6
 
5731
7
 
5732
8
 
5733
9
 
5734
drop table t0, t1;
 
5735
 
5736
# BUG#32665 Query with dependent subquery is too slow
 
5737
#
 
5738
create table t1 (
 
5739
idIndividual int primary key
 
5740
);
 
5741
insert into t1 values (1),(2);
 
5742
create table t2 (
 
5743
idContact int primary key,
 
5744
contactType int,
 
5745
idObj int
 
5746
);
 
5747
insert into t2 values (1,1,1),(2,2,2),(3,3,3);
 
5748
create table t3 (
 
5749
idAddress int primary key,
 
5750
idContact int,
 
5751
postalStripped varchar(100)
 
5752
);
 
5753
insert into t3 values (1,1, 'foo'), (2,2,'bar');
 
5754
The following must be converted to a semi-join:
 
5755
explain extended SELECT a.idIndividual FROM t1 a 
 
5756
WHERE a.idIndividual IN 
 
5757
(       SELECT c.idObj FROM t3 cona 
 
5758
INNER JOIN t2 c ON c.idContact=cona.idContact 
 
5759
WHERE cona.postalStripped='T2H3B2'
 
5760
        );
 
5761
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
5762
1       SIMPLE  cona    ALL     NULL    NULL    NULL    NULL    2       100.00  Using where; Start temporary
 
5763
1       SIMPLE  c       eq_ref  PRIMARY PRIMARY 4       test.cona.idContact     1       100.00  Using where; Using join buffer (Batched Key Access)
 
5764
1       SIMPLE  a       eq_ref  PRIMARY PRIMARY 4       test.c.idObj    1       100.00  Using index; End temporary
 
5765
Warnings:
 
5766
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'))
 
5767
drop table t1,t2,t3;
 
5768
CREATE TABLE t1 (one int, two int, flag char(1));
 
5769
CREATE TABLE t2 (one int, two int, flag char(1));
 
5770
INSERT INTO t1 VALUES(1,2,'Y'),(2,3,'Y'),(3,4,'Y'),(5,6,'N'),(7,8,'N');
 
5771
INSERT INTO t2 VALUES(1,2,'Y'),(2,3,'Y'),(3,4,'Y'),(5,6,'N'),(7,8,'N');
 
5772
SELECT * FROM t1
 
5773
WHERE ROW(one,two) IN (SELECT DISTINCT one,two FROM t2 WHERE flag = 'N');
 
5774
one     two     flag
 
5775
5       6       N
 
5776
7       8       N
 
5777
SELECT * FROM t1
 
5778
WHERE ROW(one,two) IN (SELECT DISTINCT one,two FROM t1 WHERE flag = 'N');
 
5779
one     two     flag
 
5780
5       6       N
 
5781
7       8       N
 
5782
insert into t2 values (null,null,'N');
 
5783
insert into t2 values (null,3,'0');
 
5784
insert into t2 values (null,5,'0');
 
5785
insert into t2 values (10,null,'0');
 
5786
insert into t1 values (10,3,'0');
 
5787
insert into t1 values (10,5,'0');
 
5788
insert into t1 values (10,10,'0');
 
5789
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N') as 'test' from t1;
 
5790
one     two     test
 
5791
1       2       NULL
 
5792
2       3       NULL
 
5793
3       4       NULL
 
5794
5       6       1
 
5795
7       8       1
 
5796
10      3       NULL
 
5797
10      5       NULL
 
5798
10      10      NULL
 
5799
SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
 
5800
one     two
 
5801
5       6
 
5802
7       8
 
5803
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N' group by one,two) as 'test' from t1;
 
5804
one     two     test
 
5805
1       2       NULL
 
5806
2       3       NULL
 
5807
3       4       NULL
 
5808
5       6       1
 
5809
7       8       1
 
5810
10      3       NULL
 
5811
10      5       NULL
 
5812
10      10      NULL
 
5813
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0') as 'test' from t1;
 
5814
one     two     test
 
5815
1       2       0
 
5816
2       3       NULL
 
5817
3       4       0
 
5818
5       6       0
 
5819
7       8       0
 
5820
10      3       NULL
 
5821
10      5       NULL
 
5822
10      10      NULL
 
5823
SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
 
5824
one     two     test
 
5825
1       2       0
 
5826
2       3       NULL
 
5827
3       4       0
 
5828
5       6       0
 
5829
7       8       0
 
5830
10      3       NULL
 
5831
10      5       NULL
 
5832
10      10      NULL
 
5833
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0') as 'test' from t1;
 
5834
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
5835
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    8       100.00  NULL
 
5836
2       DEPENDENT SUBQUERY      t2      ALL     NULL    NULL    NULL    NULL    9       100.00  Using where
 
5837
Warnings:
 
5838
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 isnull(`test`.`t2`.`one`)), true) and <if>(outer_field_is_not_null, ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)), 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`
 
5839
explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
 
5840
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
5841
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    8       100.00  Using where
 
5842
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      10      test.t1.one,test.t1.two 1       100.00  NULL
 
5843
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    9       100.00  Using where
 
5844
Warnings:
 
5845
Note    1003    /* select#1 */ select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` semi join (`test`.`t2`) where ((`<subquery2>`.`two` = `test`.`t1`.`two`) and (`<subquery2>`.`one` = `test`.`t1`.`one`) and (`test`.`t2`.`flag` = 'N'))
 
5846
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
 
5847
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
5848
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    8       100.00  NULL
 
5849
2       DEPENDENT SUBQUERY      t2      ALL     NULL    NULL    NULL    NULL    9       100.00  Using where
 
5850
Warnings:
 
5851
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 isnull(`test`.`t2`.`one`)), true) and <if>(outer_field_is_not_null, ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)), 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`
 
5852
DROP TABLE t1,t2;
 
5853
CREATE TABLE t1 (a char(5), b char(5));
 
5854
INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa');
 
5855
SELECT * FROM t1 WHERE (a,b) IN (('aaa','aaa'), ('aaa','bbb'));
 
5856
a       b
 
5857
aaa     aaa
 
5858
DROP TABLE t1;
 
5859
CREATE TABLE t1 (a CHAR(1), b VARCHAR(10));
 
5860
INSERT INTO t1 VALUES ('a', 'aa');
 
5861
INSERT INTO t1 VALUES ('a', 'aaa');
 
5862
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
 
5863
a       b
 
5864
CREATE INDEX I1 ON t1 (a);
 
5865
CREATE INDEX I2 ON t1 (b);
 
5866
EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
 
5867
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5868
1       SIMPLE  t1      ALL     I2      NULL    NULL    NULL    2       Using where
 
5869
1       SIMPLE  t1      ref     I1      I1      2       test.t1.b       2       Using where; Using index; FirstMatch(t1)
 
5870
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
 
5871
a       b
 
5872
CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10));
 
5873
INSERT INTO t2 SELECT * FROM t1;
 
5874
CREATE INDEX I1 ON t2 (a);
 
5875
CREATE INDEX I2 ON t2 (b);
 
5876
EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
 
5877
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5878
1       SIMPLE  t2      ALL     I2      NULL    NULL    NULL    2       Using where
 
5879
1       SIMPLE  t2      ref     I1      I1      4       test.t2.b       2       Using where; Using index; FirstMatch(t2)
 
5880
SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
 
5881
a       b
 
5882
EXPLAIN
 
5883
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
 
5884
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5885
1       SIMPLE  t1      ALL     I2      NULL    NULL    NULL    2       Using where
 
5886
1       SIMPLE  t1      ref     I1      I1      2       test.t1.b       2       Using where; Using index; FirstMatch(t1)
 
5887
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
 
5888
a       b
 
5889
DROP TABLE t1,t2;
 
5890
#
 
5891
# BUG#45928 "Differing query results depending on MRR and
 
5892
# engine_condition_pushdown settings"
 
5893
#
 
5894
CREATE TABLE `t1` (
 
5895
`pk` int(11) NOT NULL AUTO_INCREMENT,
 
5896
`time_nokey` time NOT NULL,
 
5897
`varchar_key` varchar(1) NOT NULL,
 
5898
`varchar_nokey` varchar(1) NOT NULL,
 
5899
PRIMARY KEY (`pk`),
 
5900
KEY `varchar_key` (`varchar_key`)
 
5901
) AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
 
5902
INSERT INTO `t1` VALUES (10,'00:00:00','i','i'),(11,'00:00:00','','');
 
5903
SELECT `time_nokey` G1  FROM t1  WHERE ( `varchar_nokey`  , `varchar_key`  )  IN ( 
 
5904
SELECT `varchar_nokey`  , `varchar_nokey`  )  AND `varchar_key`  >= 'c' HAVING G1  ORDER 
 
5905
BY `pk`   ;
 
5906
G1
 
5907
DROP TABLE t1;
 
5908
#
 
5909
# BUG#45863 "Assertion failed: (fixed == 0), function fix_fields(),
 
5910
#            file item.cc, line 4448"
 
5911
#
 
5912
DROP TABLE IF EXISTS C, BB;
 
5913
CREATE TABLE C (
 
5914
varchar_nokey varchar(1) NOT NULL
 
5915
);
 
5916
INSERT INTO C VALUES
 
5917
('k'),('a'),(''),('u'),('e'),('v'),('i'),
 
5918
('t'),('u'),('f'),('u'),('m'),('j'),('f'),
 
5919
('v'),('j'),('g'),('e'),('h'),('z');
 
5920
CREATE TABLE BB (
 
5921
varchar_nokey varchar(1) NOT NULL
 
5922
);
 
5923
INSERT INTO BB VALUES ('i'),('t');
 
5924
SELECT varchar_nokey FROM C
 
5925
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey
 
5926
FROM BB);
 
5927
ERROR 42S22: Unknown column 'OUTR' in 'IN/ALL/ANY subquery'
 
5928
SELECT varchar_nokey FROM C
 
5929
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey, varchar_nokey
 
5930
FROM BB);
 
5931
ERROR 42S22: Unknown column 'OUTR' in 'IN/ALL/ANY subquery'
 
5932
DROP TABLE C,BB;
 
5933
#
 
5934
# During work with BUG#45863 I had problems with a query that was
 
5935
# optimized differently in regular and prepared mode.
 
5936
# Because there was a bug in one of the selected strategies, I became
 
5937
# aware of the problem. Adding an EXPLAIN query to catch this.
 
5938
DROP TABLE IF EXISTS t1, t2, t3;
 
5939
CREATE TABLE t1
 
5940
(EMPNUM   CHAR(3) NOT NULL,
 
5941
EMPNAME  CHAR(20),
 
5942
GRADE    DECIMAL(4),
 
5943
CITY     CHAR(15));
 
5944
CREATE TABLE t2
 
5945
(PNUM     CHAR(3) NOT NULL,
 
5946
PNAME    CHAR(20),
 
5947
PTYPE    CHAR(6),
 
5948
BUDGET   DECIMAL(9),
 
5949
CITY     CHAR(15));
 
5950
CREATE TABLE t3
 
5951
(EMPNUM   CHAR(3) NOT NULL,
 
5952
PNUM     CHAR(3) NOT NULL,
 
5953
HOURS    DECIMAL(5));
 
5954
INSERT INTO t1 VALUES ('E1','Alice',12,'Deale');
 
5955
INSERT INTO t1 VALUES ('E2','Betty',10,'Vienna');
 
5956
INSERT INTO t1 VALUES ('E3','Carmen',13,'Vienna');
 
5957
INSERT INTO t1 VALUES ('E4','Don',12,'Deale');
 
5958
INSERT INTO t1 VALUES ('E5','Ed',13,'Akron');
 
5959
INSERT INTO t2 VALUES ('P1','MXSS','Design',10000,'Deale');
 
5960
INSERT INTO t2 VALUES ('P2','CALM','Code',30000,'Vienna');
 
5961
INSERT INTO t2 VALUES ('P3','SDP','Test',30000,'Tampa');
 
5962
INSERT INTO t2 VALUES ('P4','SDP','Design',20000,'Deale');
 
5963
INSERT INTO t2 VALUES ('P5','IRM','Test',10000,'Vienna');
 
5964
INSERT INTO t2 VALUES ('P6','PAYR','Design',50000,'Deale');
 
5965
INSERT INTO t3 VALUES  ('E1','P1',40);
 
5966
INSERT INTO t3 VALUES  ('E1','P2',20);
 
5967
INSERT INTO t3 VALUES  ('E1','P3',80);
 
5968
INSERT INTO t3 VALUES  ('E1','P4',20);
 
5969
INSERT INTO t3 VALUES  ('E1','P5',12);
 
5970
INSERT INTO t3 VALUES  ('E1','P6',12);
 
5971
INSERT INTO t3 VALUES  ('E2','P1',40);
 
5972
INSERT INTO t3 VALUES  ('E2','P2',80);
 
5973
INSERT INTO t3 VALUES  ('E3','P2',20);
 
5974
INSERT INTO t3 VALUES  ('E4','P2',20);
 
5975
INSERT INTO t3 VALUES  ('E4','P4',40);
 
5976
INSERT INTO t3 VALUES  ('E4','P5',80);
 
5977
CREATE UNIQUE INDEX t1_IDX ON t1(EMPNUM);
 
5978
EXPLAIN SELECT EMPNAME
 
5979
FROM t1
 
5980
WHERE EMPNUM IN
 
5981
(SELECT EMPNUM
 
5982
FROM t3
 
5983
WHERE PNUM IN
 
5984
(SELECT PNUM
 
5985
FROM t2
 
5986
WHERE PTYPE = 'Design'));
 
5987
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
5988
1       SIMPLE  t1      ALL     t1_IDX  NULL    NULL    NULL    5       Using where
 
5989
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
5990
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
5991
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
5992
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
 
5993
FROM t1
 
5994
WHERE EMPNUM IN
 
5995
   (SELECT EMPNUM
 
5996
    FROM t3
 
5997
    WHERE PNUM IN
 
5998
       (SELECT PNUM
 
5999
        FROM t2
 
6000
        WHERE PTYPE = 'Design'))";
 
6001
EXECUTE stmt;
 
6002
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6003
1       SIMPLE  t1      ALL     t1_IDX  NULL    NULL    NULL    5       Using where
 
6004
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6005
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6006
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6007
EXECUTE stmt;
 
6008
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6009
1       SIMPLE  t1      ALL     t1_IDX  NULL    NULL    NULL    5       Using where
 
6010
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6011
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6012
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6013
DEALLOCATE PREPARE stmt;
 
6014
DROP INDEX t1_IDX ON t1;
 
6015
CREATE INDEX t1_IDX ON t1(EMPNUM);
 
6016
EXPLAIN SELECT EMPNAME
 
6017
FROM t1
 
6018
WHERE EMPNUM IN
 
6019
(SELECT EMPNUM
 
6020
FROM t3
 
6021
WHERE PNUM IN
 
6022
(SELECT PNUM
 
6023
FROM t2
 
6024
WHERE PTYPE = 'Design'));
 
6025
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6026
1       SIMPLE  t1      ALL     t1_IDX  NULL    NULL    NULL    5       Using where
 
6027
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6028
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6029
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6030
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
 
6031
FROM t1
 
6032
WHERE EMPNUM IN
 
6033
   (SELECT EMPNUM
 
6034
    FROM t3
 
6035
    WHERE PNUM IN
 
6036
       (SELECT PNUM
 
6037
        FROM t2
 
6038
        WHERE PTYPE = 'Design'))";
 
6039
EXECUTE stmt;
 
6040
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6041
1       SIMPLE  t1      ALL     t1_IDX  NULL    NULL    NULL    5       Using where
 
6042
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6043
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6044
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6045
EXECUTE stmt;
 
6046
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6047
1       SIMPLE  t1      ALL     t1_IDX  NULL    NULL    NULL    5       Using where
 
6048
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6049
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6050
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6051
DEALLOCATE PREPARE stmt;
 
6052
DROP INDEX t1_IDX ON t1;
 
6053
EXPLAIN SELECT EMPNAME
 
6054
FROM t1
 
6055
WHERE EMPNUM IN
 
6056
(SELECT EMPNUM
 
6057
FROM t3
 
6058
WHERE PNUM IN
 
6059
(SELECT PNUM
 
6060
FROM t2
 
6061
WHERE PTYPE = 'Design'));
 
6062
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6063
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    5       Using where
 
6064
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6065
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6066
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6067
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
 
6068
FROM t1
 
6069
WHERE EMPNUM IN
 
6070
   (SELECT EMPNUM
 
6071
    FROM t3
 
6072
    WHERE PNUM IN
 
6073
       (SELECT PNUM
 
6074
        FROM t2
 
6075
        WHERE PTYPE = 'Design'))";
 
6076
EXECUTE stmt;
 
6077
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6078
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    5       Using where
 
6079
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6080
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6081
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6082
EXECUTE stmt;
 
6083
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6084
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    5       Using where
 
6085
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.EMPNUM  1       NULL
 
6086
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    6       Using where
 
6087
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    12      Using where
 
6088
DEALLOCATE PREPARE stmt;
 
6089
DROP TABLE t1, t2, t3;
 
6090
#
 
6091
# BUG#45221 Query SELECT pk FROM C WHERE pk IN (SELECT int_key) failing
 
6092
#
 
6093
CREATE TABLE t1 (
 
6094
i1_key INT,
 
6095
i2 INT,
 
6096
i3 INT,
 
6097
KEY i1_index (i1_key)
 
6098
);
 
6099
INSERT INTO t1 VALUES (9,1,2), (9,2,1);
 
6100
CREATE TABLE t2 (
 
6101
pk INT NOT NULL,
 
6102
i1 INT,
 
6103
PRIMARY KEY (pk)
 
6104
);
 
6105
INSERT INTO t2 VALUES (9,1);
 
6106
SELECT pk
 
6107
FROM t2
 
6108
WHERE 
 
6109
pk IN ( 
 
6110
SELECT i1_key
 
6111
FROM t1
 
6112
WHERE t1.i2 < t1.i3 XOR t2.i1 > 1
 
6113
ORDER BY t1.i2 desc);
 
6114
pk
 
6115
9
 
6116
DROP TABLE t1,t2;
 
6117
# BUG#50361 Doublenested noncorrelated subquery with FirstMatch and join cache wrong result
 
6118
#
 
6119
CREATE TABLE t1(
 
6120
id INTEGER
 
6121
);
 
6122
INSERT INTO t1 VALUES(10),(20);
 
6123
create table t2 select * from t1;
 
6124
create table t3 select * from t1;
 
6125
SELECT *
 
6126
FROM t1
 
6127
WHERE 1 IN(SELECT 1
 
6128
FROM t2
 
6129
WHERE 1 IN(SELECT 1
 
6130
FROM t3));
 
6131
id
 
6132
10
 
6133
20
 
6134
explain extended SELECT *
 
6135
FROM t1
 
6136
WHERE 1 IN(SELECT 1
 
6137
FROM t2
 
6138
WHERE 1 IN(SELECT 1
 
6139
FROM t3));
 
6140
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6141
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6142
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      4       const   1       100.00  NULL
 
6143
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6144
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6145
Warnings:
 
6146
Note    1003    /* select#1 */ select `test`.`t1`.`id` AS `id` from `test`.`t1` semi join (`test`.`t3` join `test`.`t2`) where 1
 
6147
delete from t2;
 
6148
delete from t3;
 
6149
INSERT INTO t1 VALUES(30),(40),(50),(60),(70),(80),(90);
 
6150
insert into t2 select * from t1;
 
6151
insert into t3 select * from t1;
 
6152
create table t4 select * from t1;
 
6153
SELECT *
 
6154
FROM t1
 
6155
WHERE 1 IN(SELECT 1
 
6156
FROM t2
 
6157
WHERE 1 IN(SELECT 1
 
6158
FROM t3
 
6159
WHERE 1 IN(SELECT 1
 
6160
FROM t4)));
 
6161
id
 
6162
10
 
6163
20
 
6164
30
 
6165
40
 
6166
50
 
6167
60
 
6168
70
 
6169
80
 
6170
90
 
6171
explain SELECT *
 
6172
FROM t1
 
6173
WHERE 1 IN(SELECT 1
 
6174
FROM t2
 
6175
WHERE 1 IN(SELECT 1
 
6176
FROM t3
 
6177
WHERE 1 IN(SELECT 1
 
6178
FROM t4)));
 
6179
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6180
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    9       NULL
 
6181
1       SIMPLE  <subquery2>     const   <auto_key>      <auto_key>      4       const   1       NULL
 
6182
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    9       NULL
 
6183
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    9       NULL
 
6184
2       MATERIALIZED    t4      ALL     NULL    NULL    NULL    NULL    9       NULL
 
6185
SELECT *
 
6186
FROM t1
 
6187
WHERE 1 IN(SELECT 1
 
6188
FROM t1
 
6189
WHERE 1 IN(SELECT 1
 
6190
FROM t1
 
6191
WHERE 1 IN(SELECT 1
 
6192
FROM t1)));
 
6193
id
 
6194
10
 
6195
20
 
6196
30
 
6197
40
 
6198
50
 
6199
60
 
6200
70
 
6201
80
 
6202
90
 
6203
drop table t1,t2,t3,t4;
 
6204
#
 
6205
# Bug#53236 Segfault in DTCollation::set(DTCollation&)
 
6206
#
 
6207
CREATE TABLE t1 (
 
6208
pk INTEGER AUTO_INCREMENT,
 
6209
col_varchar VARCHAR(1),
 
6210
PRIMARY KEY (pk)
 
6211
)
 
6212
;
 
6213
INSERT INTO t1 (col_varchar) 
 
6214
VALUES
 
6215
('w'),
 
6216
('m')
 
6217
;
 
6218
SELECT  table1.pk
 
6219
FROM ( t1 AS table1 JOIN t1 AS table2 ON (table1.col_varchar =
 
6220
table2.col_varchar) ) 
 
6221
WHERE ( 1, 2 ) IN ( SELECT SUBQUERY1_t1.pk AS SUBQUERY1_field1,
 
6222
SUBQUERY1_t1.pk AS SUBQUERY1_field2
 
6223
FROM ( t1 AS SUBQUERY1_t1 JOIN t1 AS SUBQUERY1_t2
 
6224
ON (SUBQUERY1_t2.col_varchar =
 
6225
SUBQUERY1_t1.col_varchar) ) ) 
 
6226
;
 
6227
pk
 
6228
drop table t1;
 
6229
#
 
6230
# BUG#53298 "wrong result with semijoin (no semijoin strategy chosen)"
 
6231
#
 
6232
create table t1 (uid int, fid int);
 
6233
insert into t1 values (1,1), (3,1);
 
6234
create table t2 (uid int, name varchar(128));
 
6235
insert into t2 values (1, "A"), (2, "B");
 
6236
create table t3 (uid int, fid int, index(uid));
 
6237
insert into t3 values (1,3), (1,3);
 
6238
create table t4 (uid int);
 
6239
insert into t4 values (3);
 
6240
explain select t2.uid from t2, t1 
 
6241
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
 
6242
and t2.uid=t1.fid;
 
6243
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6244
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
6245
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
6246
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
6247
2       MATERIALIZED    t4      ALL     NULL    NULL    NULL    NULL    1       NULL
 
6248
2       MATERIALIZED    t3      ref     uid     uid     5       const   1       Using where; Using join buffer (Batched Key Access)
 
6249
select t2.uid from t2, t1 
 
6250
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
 
6251
and t2.uid=t1.fid;
 
6252
uid
 
6253
1
 
6254
drop table t1,t2,t3,t4;
 
6255
CREATE TABLE t1 (
 
6256
pk int,
 
6257
a varchar(1),
 
6258
b varchar(4),
 
6259
c varchar(4),
 
6260
d varchar(4),
 
6261
PRIMARY KEY (pk)
 
6262
);
 
6263
INSERT INTO t1 VALUES (1,'o','ffff','ffff','ffoo'),(2,'f','ffff','ffff','ffff');
 
6264
CREATE TABLE t2 LIKE t1;
 
6265
INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii'),(2,'f','ffff','ffff','ffff');
 
6266
EXPLAIN SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
 
6267
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6268
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
6269
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6270
SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
 
6271
pk
 
6272
2
 
6273
SELECT pk FROM t1 WHERE (b,c,d) IN (SELECT b,c,d FROM t2 WHERE pk > 0);
 
6274
pk
 
6275
2
 
6276
DROP TABLE t1, t2;
 
6277
CREATE TABLE t1 (f1 INT, f2 DECIMAL(5,3)) ENGINE=MyISAM;
 
6278
INSERT INTO t1 (f1, f2) VALUES (1, 1.789);
 
6279
INSERT INTO t1 (f1, f2) VALUES (13, 1.454);
 
6280
INSERT INTO t1 (f1, f2) VALUES (10, 1.668);
 
6281
CREATE TABLE t2 LIKE t1;
 
6282
INSERT INTO t2 VALUES (1, 1.789);
 
6283
INSERT INTO t2 VALUES (13, 1.454);
 
6284
EXPLAIN SELECT COUNT(*) FROM t1 WHERE (f1,f2) IN (SELECT f1,f2 FROM t2);
 
6285
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6286
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
6287
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
6288
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
6289
SELECT COUNT(*) FROM t1 WHERE (f1,f2) IN (SELECT f1,f2 FROM t2);
 
6290
COUNT(*)
 
6291
2
 
6292
DROP TABLE t1, t2;
 
6293
CREATE TABLE t1 (
 
6294
ID int(11) NOT NULL auto_increment,
 
6295
Name char(35) NOT NULL default '',
 
6296
Country char(3) NOT NULL default '',
 
6297
Population int(11) NOT NULL default '0',
 
6298
PRIMARY KEY  (ID),
 
6299
INDEX (Population),
 
6300
INDEX (Country) 
 
6301
);
 
6302
CREATE TABLE t2 (
 
6303
Code char(3) NOT NULL default '',
 
6304
Name char(52) NOT NULL default '',
 
6305
SurfaceArea float(10,2) NOT NULL default '0.00',
 
6306
Population int(11) NOT NULL default '0',
 
6307
Capital int(11) default NULL,
 
6308
PRIMARY KEY  (Code),
 
6309
UNIQUE INDEX (Name),
 
6310
INDEX (Population)
 
6311
);
 
6312
CREATE TABLE t3 (
 
6313
Country char(3) NOT NULL default '',
 
6314
Language char(30) NOT NULL default '',
 
6315
Percentage float(3,1) NOT NULL default '0.0',
 
6316
PRIMARY KEY  (Country, Language),
 
6317
INDEX (Percentage)
 
6318
);
 
6319
EXPLAIN SELECT Name FROM t2 
 
6320
WHERE t2.Code IN (SELECT Country FROM t1 WHERE Population > 5000000)
 
6321
AND
 
6322
t2.Code IN (SELECT Country FROM t3 
 
6323
WHERE Language='English' AND Percentage > 10 AND
 
6324
t2.Population > 100000);
 
6325
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6326
1       SIMPLE  t1      range   Population,Country      Population      4       NULL    1       Using index condition; Using MRR; Start temporary
 
6327
1       SIMPLE  t2      eq_ref  PRIMARY,Population      PRIMARY 3       test.t1.Country 1       Using where; End temporary; Using join buffer (Batched Key Access)
 
6328
1       SIMPLE  t3      eq_ref  PRIMARY,Percentage      PRIMARY 33      test.t1.Country,const   1       Using index condition; Using where; Using join buffer (Batched Key Access)
 
6329
EXPLAIN FORMAT=JSON SELECT Name FROM t2 
 
6330
WHERE t2.Code IN (SELECT Country FROM t1 WHERE Population > 5000000)
 
6331
AND
 
6332
t2.Code IN (SELECT Country FROM t3 
 
6333
WHERE Language='English' AND Percentage > 10 AND
 
6334
t2.Population > 100000);
 
6335
EXPLAIN
 
6336
{
 
6337
  "query_block": {
 
6338
    "select_id": 1,
 
6339
    "nested_loop": [
 
6340
      {
 
6341
        "duplicates_removal": {
 
6342
          "using_temporary_table": true,
 
6343
          "nested_loop": [
 
6344
            {
 
6345
              "table": {
 
6346
                "table_name": "t1",
 
6347
                "access_type": "range",
 
6348
                "possible_keys": [
 
6349
                  "Population",
 
6350
                  "Country"
 
6351
                ],
 
6352
                "key": "Population",
 
6353
                "used_key_parts": [
 
6354
                  "Population"
 
6355
                ],
 
6356
                "key_length": "4",
 
6357
                "rows": 1,
 
6358
                "filtered": 100,
 
6359
                "index_condition": "(`test`.`t1`.`Population` > 5000000)",
 
6360
                "using_MRR": true
 
6361
              }
 
6362
            },
 
6363
            {
 
6364
              "table": {
 
6365
                "table_name": "t2",
 
6366
                "access_type": "eq_ref",
 
6367
                "possible_keys": [
 
6368
                  "PRIMARY",
 
6369
                  "Population"
 
6370
                ],
 
6371
                "key": "PRIMARY",
 
6372
                "used_key_parts": [
 
6373
                  "Code"
 
6374
                ],
 
6375
                "key_length": "3",
 
6376
                "ref": [
 
6377
                  "test.t1.Country"
 
6378
                ],
 
6379
                "rows": 1,
 
6380
                "filtered": 100,
 
6381
                "using_join_buffer": "Batched Key Access",
 
6382
                "attached_condition": "(`test`.`t2`.`Population` > 100000)"
 
6383
              }
 
6384
            }
 
6385
          ]
 
6386
        }
 
6387
      },
 
6388
      {
 
6389
        "table": {
 
6390
          "table_name": "t3",
 
6391
          "access_type": "eq_ref",
 
6392
          "possible_keys": [
 
6393
            "PRIMARY",
 
6394
            "Percentage"
 
6395
          ],
 
6396
          "key": "PRIMARY",
 
6397
          "used_key_parts": [
 
6398
            "Country",
 
6399
            "Language"
 
6400
          ],
 
6401
          "key_length": "33",
 
6402
          "ref": [
 
6403
            "test.t1.Country",
 
6404
            "const"
 
6405
          ],
 
6406
          "rows": 1,
 
6407
          "filtered": 100,
 
6408
          "index_condition": "(`test`.`t3`.`Language` = 'English')",
 
6409
          "using_join_buffer": "Batched Key Access",
 
6410
          "attached_condition": "(`test`.`t3`.`Percentage` > 10)"
 
6411
        }
 
6412
      }
 
6413
    ]
 
6414
  }
 
6415
}
 
6416
Warnings:
 
6417
Note    1276    Field or reference 'test.t2.Population' of SELECT #3 was resolved in SELECT #1
 
6418
Note    1003    /* select#1 */ select `test`.`t2`.`Name` AS `Name` from `test`.`t3` semi join (`test`.`t1`) join `test`.`t2` where ((`test`.`t2`.`Code` = `test`.`t1`.`Country`) and (`test`.`t3`.`Country` = `test`.`t1`.`Country`) and (`test`.`t3`.`Language` = 'English') and (`test`.`t3`.`Percentage` > 10) and (`test`.`t2`.`Population` > 100000) and (`test`.`t1`.`Population` > 5000000))
 
6419
DROP TABLE t1,t2,t3;
 
6420
CREATE TABLE t1 (
 
6421
Code char(3) NOT NULL DEFAULT '',
 
6422
Name char(52) NOT NULL DEFAULT '',
 
6423
Continent enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL DEFAULT 'Asia',
 
6424
Region char(26) NOT NULL DEFAULT '',
 
6425
SurfaceArea float(10,2) NOT NULL DEFAULT '0.00',
 
6426
IndepYear smallint(6) DEFAULT NULL,
 
6427
Population int(11) NOT NULL DEFAULT '0',
 
6428
LifeExpectancy float(3,1) DEFAULT NULL,
 
6429
GNP float(10,2) DEFAULT NULL,
 
6430
GNPOld float(10,2) DEFAULT NULL,
 
6431
LocalName char(45) NOT NULL DEFAULT '',
 
6432
GovernmentForm char(45) NOT NULL DEFAULT '',
 
6433
HeadOfState char(60) DEFAULT NULL,
 
6434
Capital int(11) DEFAULT NULL,
 
6435
Code2 char(2) NOT NULL DEFAULT '',
 
6436
PRIMARY KEY (Code)
 
6437
);
 
6438
CREATE TABLE t2 (
 
6439
ID int(11) NOT NULL AUTO_INCREMENT,
 
6440
Name char(35) NOT NULL DEFAULT '',
 
6441
CountryCode char(3) NOT NULL DEFAULT '',
 
6442
District char(20) NOT NULL DEFAULT '',
 
6443
Population int(11) NOT NULL DEFAULT '0',
 
6444
PRIMARY KEY (ID),
 
6445
KEY CountryCode (CountryCode)
 
6446
);
 
6447
Fill the table with test data
 
6448
This must not use LooseScan:
 
6449
EXPLAIN SELECT Name FROM t1 
 
6450
WHERE t1.Code IN (
 
6451
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
 
6452
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6453
1       SIMPLE  t1      ALL     PRIMARY NULL    NULL    NULL    31      Using where
 
6454
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      3       test.t1.Code    1       NULL
 
6455
2       MATERIALIZED    t2      ALL     CountryCode     NULL    NULL    NULL    545     Using where
 
6456
SELECT Name FROM t1 
 
6457
WHERE t1.Code IN (
 
6458
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
 
6459
Name
 
6460
Austria
 
6461
Canada
 
6462
China
 
6463
Czech Republic
 
6464
drop table t1, t2;
 
6465
create table t0 (a int);
 
6466
insert into t0 values (0),(1),(2),(3),(4);
 
6467
create table t1 (a int, b int, key(a));
 
6468
insert into t1 select a,a from t0;
 
6469
create table t2 (a int, b int, primary key(a));
 
6470
insert into t2 select * from t1;
 
6471
Table t2, unlike table t1, should be displayed as pulled out
 
6472
explain extended select * from t0
 
6473
where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
 
6474
t1.b=t2.b);
 
6475
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6476
1       SIMPLE  t0      ALL     NULL    NULL    NULL    NULL    5       100.00  Using where; Start temporary
 
6477
1       SIMPLE  t1      ref     a       a       5       test.t0.a       1       100.00  Using join buffer (Batched Key Access)
 
6478
1       SIMPLE  t2      eq_ref  PRIMARY PRIMARY 4       test.t0.a       1       100.00  Using where; End temporary; Using join buffer (Batched Key Access)
 
6479
Warnings:
 
6480
Note    1276    Field or reference 'test.t0.a' of SELECT #2 was resolved in SELECT #1
 
6481
Note    1003    /* select#1 */ select `test`.`t0`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) join `test`.`t0` where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t1`.`a` = `test`.`t0`.`a`) and (`test`.`t2`.`a` = `test`.`t0`.`a`))
 
6482
update t1 set a=3, b=11 where a=4;
 
6483
update t2 set b=11 where a=3;
 
6484
create temporary table tmp select * from t0 where t0.a in 
 
6485
(select t1.a from t1, t2 where t2.a=t0.a and t1.b=t2.b);
 
6486
create temporary table tmp_as_ref (a int);
 
6487
insert into tmp_as_ref values(0),(1),(2),(3);
 
6488
select * from tmp;
 
6489
a
 
6490
0
 
6491
1
 
6492
2
 
6493
3
 
6494
drop table t0, t1, t2, tmp, tmp_as_ref;
 
6495
CREATE TABLE t1 (
 
6496
id int(11) NOT NULL,
 
6497
PRIMARY KEY (id));
 
6498
CREATE TABLE t2 (
 
6499
id int(11) NOT NULL,
 
6500
fid int(11) NOT NULL,
 
6501
PRIMARY KEY (id));
 
6502
insert into t1 values(1);
 
6503
insert into t2 values(1,7503),(2,1);
 
6504
explain select count(*) 
 
6505
from t1 
 
6506
where fid IN (select fid from t2 where (id between 7502 and 8420) order by fid );
 
6507
ERROR 42S22: Unknown column 'fid' in 'IN/ALL/ANY subquery'
 
6508
drop table t1, t2;
 
6509
create table t1 (a int, b int, key (a), key (b));
 
6510
insert into t1 values (2,4),(2,4),(2,4);
 
6511
select t1.a from t1 
 
6512
where 
 
6513
t1.a in (select 1 from t1 where t1.a in (select 1 from t1) group by  t1.a);
 
6514
a
 
6515
drop table t1;
 
6516
create table t1(a int,b int,key(a),key(b));
 
6517
insert into t1 values (1,1),(2,2),(3,3);
 
6518
select 1 from t1 
 
6519
where t1.a not in (select 1 from t1 
 
6520
where t1.a in (select 1 from t1) 
 
6521
group by  t1.b);
 
6522
1
 
6523
1
 
6524
1
 
6525
drop table t1;
 
6526
CREATE TABLE t1
 
6527
(EMPNUM   CHAR(3) NOT NULL,
 
6528
EMPNAME  CHAR(20),
 
6529
GRADE    DECIMAL(4),
 
6530
CITY     CHAR(15));
 
6531
CREATE TABLE t2
 
6532
(PNUM     CHAR(3) NOT NULL,
 
6533
PNAME    CHAR(20),
 
6534
PTYPE    CHAR(6),
 
6535
BUDGET   DECIMAL(9),
 
6536
CITY     CHAR(15));
 
6537
CREATE TABLE t3
 
6538
(EMPNUM   CHAR(3) NOT NULL,
 
6539
PNUM     CHAR(3) NOT NULL,
 
6540
HOURS    DECIMAL(5));
 
6541
INSERT INTO t1 VALUES ('E1','Alice',12,'Deale');
 
6542
INSERT INTO t1 VALUES ('E2','Betty',10,'Vienna');
 
6543
INSERT INTO t1 VALUES ('E3','Carmen',13,'Vienna');
 
6544
INSERT INTO t1 VALUES ('E4','Don',12,'Deale');
 
6545
INSERT INTO t1 VALUES ('E5','Ed',13,'Akron');
 
6546
INSERT INTO t2 VALUES ('P1','MXSS','Design',10000,'Deale');
 
6547
INSERT INTO t2 VALUES ('P2','CALM','Code',30000,'Vienna');
 
6548
INSERT INTO t2 VALUES ('P3','SDP','Test',30000,'Tampa');
 
6549
INSERT INTO t2 VALUES ('P4','SDP','Design',20000,'Deale');
 
6550
INSERT INTO t2 VALUES ('P5','IRM','Test',10000,'Vienna');
 
6551
INSERT INTO t2 VALUES ('P6','PAYR','Design',50000,'Deale');
 
6552
INSERT INTO t3 VALUES  ('E1','P1',40);
 
6553
INSERT INTO t3 VALUES  ('E1','P2',20);
 
6554
INSERT INTO t3 VALUES  ('E1','P3',80);
 
6555
INSERT INTO t3 VALUES  ('E1','P4',20);
 
6556
INSERT INTO t3 VALUES  ('E1','P5',12);
 
6557
INSERT INTO t3 VALUES  ('E1','P6',12);
 
6558
INSERT INTO t3 VALUES  ('E2','P1',40);
 
6559
INSERT INTO t3 VALUES  ('E2','P2',80);
 
6560
INSERT INTO t3 VALUES  ('E3','P2',20);
 
6561
INSERT INTO t3 VALUES  ('E4','P2',20);
 
6562
INSERT INTO t3 VALUES  ('E4','P4',40);
 
6563
INSERT INTO t3 VALUES  ('E4','P5',80);
 
6564
SELECT * FROM t1;
 
6565
EMPNUM  EMPNAME GRADE   CITY
 
6566
E1      Alice   12      Deale
 
6567
E2      Betty   10      Vienna
 
6568
E3      Carmen  13      Vienna
 
6569
E4      Don     12      Deale
 
6570
E5      Ed      13      Akron
 
6571
CREATE UNIQUE INDEX t1_IDX ON t1(EMPNUM);
 
6572
SELECT EMPNAME
 
6573
FROM t1
 
6574
WHERE EMPNUM IN
 
6575
(SELECT EMPNUM
 
6576
FROM t3
 
6577
WHERE PNUM IN
 
6578
(SELECT PNUM
 
6579
FROM t2
 
6580
WHERE PTYPE = 'Design'));
 
6581
EMPNAME
 
6582
Alice
 
6583
Betty
 
6584
Don
 
6585
DROP INDEX t1_IDX ON t1;
 
6586
CREATE INDEX t1_IDX ON t1(EMPNUM);
 
6587
SELECT EMPNAME
 
6588
FROM t1
 
6589
WHERE EMPNUM IN
 
6590
(SELECT EMPNUM
 
6591
FROM t3
 
6592
WHERE PNUM IN
 
6593
(SELECT PNUM
 
6594
FROM t2
 
6595
WHERE PTYPE = 'Design'));
 
6596
EMPNAME
 
6597
Alice
 
6598
Betty
 
6599
Don
 
6600
DROP INDEX t1_IDX ON t1;
 
6601
SELECT EMPNAME
 
6602
FROM t1
 
6603
WHERE EMPNUM IN
 
6604
(SELECT EMPNUM
 
6605
FROM t3
 
6606
WHERE PNUM IN
 
6607
(SELECT PNUM
 
6608
FROM t2
 
6609
WHERE PTYPE = 'Design'));
 
6610
EMPNAME
 
6611
Alice
 
6612
Betty
 
6613
Don
 
6614
DROP TABLE t1, t2, t3;
 
6615
CREATE TABLE t1 (f1 INT NOT NULL);
 
6616
CREATE VIEW v1 (a) AS SELECT f1 IN (SELECT f1 FROM t1) FROM t1;
 
6617
SELECT * FROM v1;
 
6618
a
 
6619
drop view v1;
 
6620
drop table t1;
 
6621
create table t0 (a int);
 
6622
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
6623
create table t1(a int, b int);
 
6624
insert into t1 values (0,0),(1,1),(2,2);
 
6625
create table t2 as select * from t1;
 
6626
create table t3 (pk int, a int, primary key(pk));
 
6627
insert into t3 select a,a from t0;
 
6628
explain 
 
6629
select * from t1 left join t2 on (t2.a= t1.a and t2.a in (select pk from t3));
 
6630
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6631
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    3       NULL
 
6632
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    3       Using where
 
6633
1       SIMPLE  t3      eq_ref  PRIMARY PRIMARY 4       test.t2.a       1       Using index
 
6634
drop table t0, t1, t2, t3;
 
6635
create table t0 (a int);
 
6636
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
6637
create table t1 (a int) as select A.a + 10 *(B.a + 10*C.a) as a  from t0 A, t0 B, t0 C;
 
6638
create table t2 (id int, a int, primary key(id), key(a)) as select a as id, a as a  from t1;
 
6639
show create table t2;
 
6640
Table   Create Table
 
6641
t2      CREATE TABLE `t2` (
 
6642
  `id` int(11) NOT NULL DEFAULT '0',
 
6643
  `a` int(11) DEFAULT NULL,
 
6644
  PRIMARY KEY (`id`),
 
6645
  KEY `a` (`a`)
 
6646
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
6647
set @a=0;
 
6648
create table t3 as select * from t2 limit 0;
 
6649
insert into t3 select @a:=@a+1, t2.a from t2, t0;
 
6650
insert into t3 select @a:=@a+1, t2.a from t2, t0;
 
6651
insert into t3 select @a:=@a+1, t2.a from t2, t0;
 
6652
alter table t3 add primary key(id), add key(a);
 
6653
The following must use loose index scan over t3, key a:
 
6654
explain select count(a) from t2 where a in ( SELECT  a FROM t3);
 
6655
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6656
1       SIMPLE  t2      index   a       a       5       NULL    1000    Using where; Using index
 
6657
1       SIMPLE  t3      ref     a       a       5       test.t2.a       30      Using index; FirstMatch(t2)
 
6658
select count(a) from t2 where a in ( SELECT  a FROM t3);
 
6659
count(a)
 
6660
1000
 
6661
drop table t0,t1,t2,t3;
 
6662
#
 
6663
# Bug#33062: subquery in stored routine cause crash
 
6664
#
 
6665
CREATE TABLE t1(a INT);
 
6666
CREATE TABLE t2(c INT);
 
6667
CREATE PROCEDURE p1(v1 int)
 
6668
BEGIN
 
6669
SELECT 1 FROM t1 WHERE a = v1 AND a IN (SELECT c FROM t2);
 
6670
END
 
6671
//
 
6672
CREATE PROCEDURE p2(v1 int)
 
6673
BEGIN
 
6674
SELECT 1 FROM t1 WHERE a IN (SELECT c FROM t2);
 
6675
END
 
6676
//
 
6677
CREATE PROCEDURE p3(v1 int)
 
6678
BEGIN
 
6679
SELECT 1 
 
6680
FROM 
 
6681
t1 t01,t1 t02,t1 t03,t1 t04,t1 t05,t1 t06,t1 t07,t1 t08,
 
6682
t1 t09,t1 t10,t1 t11,t1 t12,t1 t13,t1 t14,t1 t15,t1 t16,
 
6683
t1 t17,t1 t18,t1 t19,t1 t20,t1 t21,t1 t22,t1 t23,t1 t24,
 
6684
t1 t25,t1 t26,t1 t27,t1 t28,t1 t29,t1 t30,t1 t31,t1 t32,
 
6685
t1 t33,t1 t34,t1 t35,t1 t36,t1 t37,t1 t38,t1 t39,t1 t40,
 
6686
t1 t41,t1 t42,t1 t43,t1 t44,t1 t45,t1 t46,t1 t47,t1 t48,
 
6687
t1 t49,t1 t50,t1 t51,t1 t52,t1 t53,t1 t54,t1 t55,t1 t56,
 
6688
t1 t57,t1 t58,t1 t59,t1 t60
 
6689
WHERE t01.a IN (SELECT c FROM t2);
 
6690
END
 
6691
//
 
6692
CREATE PROCEDURE p4(v1 int)
 
6693
BEGIN
 
6694
SELECT 1 
 
6695
FROM 
 
6696
t1 t01,t1 t02,t1 t03,t1 t04,t1 t05,t1 t06,t1 t07,t1 t08,
 
6697
t1 t09,t1 t10,t1 t11,t1 t12,t1 t13,t1 t14,t1 t15,t1 t16,
 
6698
t1 t17,t1 t18,t1 t19,t1 t20,t1 t21,t1 t22,t1 t23,t1 t24,
 
6699
t1 t25,t1 t26,t1 t27,t1 t28,t1 t29,t1 t30,t1 t31,t1 t32,
 
6700
t1 t33,t1 t34,t1 t35,t1 t36,t1 t37,t1 t38,t1 t39,t1 t40,
 
6701
t1 t41,t1 t42,t1 t43,t1 t44,t1 t45,t1 t46,t1 t47,t1 t48,
 
6702
t1 t49,t1 t50,t1 t51,t1 t52,t1 t53,t1 t54,t1 t55,t1 t56,
 
6703
t1 t57,t1 t58,t1 t59,t1 t60
 
6704
WHERE t01.a = v1 AND t01.a IN (SELECT c FROM t2);
 
6705
END
 
6706
//
 
6707
CALL p1(1);
 
6708
1
 
6709
CALL p2(1);
 
6710
1
 
6711
CALL p3(1);
 
6712
1
 
6713
CALL p4(1);
 
6714
1
 
6715
DROP TABLE t1, t2;
 
6716
DROP PROCEDURE p1;
 
6717
DROP PROCEDURE p2;
 
6718
DROP PROCEDURE p3;
 
6719
DROP PROCEDURE p4;
 
6720
 
6721
# Bug#48213 Materialized subselect crashes if using GEOMETRY type
 
6722
 
6723
CREATE TABLE t1 (
 
6724
pk int,
 
6725
a varchar(1),
 
6726
b varchar(4),
 
6727
c tinyblob,
 
6728
d blob,
 
6729
e mediumblob,
 
6730
f longblob,
 
6731
g tinytext,
 
6732
h text,
 
6733
i mediumtext,
 
6734
j longtext,
 
6735
k geometry,
 
6736
PRIMARY KEY (pk)
 
6737
);
 
6738
INSERT INTO t1 VALUES (1,'o','ffff','ffff','ffoo','ffff','ffff','ffff','ffff','ffff','ffff',GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))')), (2,'f','ffff','ffff','ffff', 'ffff','ffff','ffff','ffff','ffff','ffff',GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'));
 
6739
CREATE TABLE t2 LIKE t1;
 
6740
INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii','iiii','ffff','ffff','ffff','ffff','ffff',GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))')), (2,'f','ffff','ffff','ffff','ffff','ffff','ffff','ffff','ffff','ffff',GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'));
 
6741
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (a, b) IN (SELECT a, b FROM t2 WHERE pk > 0);
 
6742
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6743
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6744
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6745
Warnings:
 
6746
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t2`.`pk` > 0))
 
6747
SELECT pk FROM t1 WHERE (a, b) IN (SELECT a, b FROM t2 WHERE pk > 0);
 
6748
pk
 
6749
2
 
6750
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, c) IN (SELECT b, c FROM t2 WHERE pk > 0);
 
6751
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6752
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6753
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6754
Warnings:
 
6755
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`c` = `test`.`t1`.`c`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6756
SELECT pk FROM t1 WHERE (b, c) IN (SELECT b, c FROM t2 WHERE pk > 0);
 
6757
pk
 
6758
1
 
6759
2
 
6760
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, d) IN (SELECT b, d FROM t2 WHERE pk > 0);
 
6761
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6762
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6763
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6764
Warnings:
 
6765
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`d` = `test`.`t1`.`d`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6766
SELECT pk FROM t1 WHERE (b, d) IN (SELECT b, d FROM t2 WHERE pk > 0);
 
6767
pk
 
6768
2
 
6769
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, e) IN (SELECT b, e FROM t2 WHERE pk > 0);
 
6770
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6771
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6772
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6773
Warnings:
 
6774
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`e` = `test`.`t1`.`e`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6775
SELECT pk FROM t1 WHERE (b, e) IN (SELECT b, e FROM t2 WHERE pk > 0);
 
6776
pk
 
6777
1
 
6778
2
 
6779
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, f) IN (SELECT b, f FROM t2 WHERE pk > 0);
 
6780
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6781
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6782
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6783
Warnings:
 
6784
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`f` = `test`.`t1`.`f`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6785
SELECT pk FROM t1 WHERE (b, f) IN (SELECT b, f FROM t2 WHERE pk > 0);
 
6786
pk
 
6787
1
 
6788
2
 
6789
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, g) IN (SELECT b, g FROM t2 WHERE pk > 0);
 
6790
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6791
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6792
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6793
Warnings:
 
6794
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`g` = `test`.`t1`.`g`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6795
SELECT pk FROM t1 WHERE (b, g) IN (SELECT b, g FROM t2 WHERE pk > 0);
 
6796
pk
 
6797
1
 
6798
2
 
6799
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, h) IN (SELECT b, h FROM t2 WHERE pk > 0);
 
6800
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6801
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6802
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6803
Warnings:
 
6804
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`h` = `test`.`t1`.`h`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6805
SELECT pk FROM t1 WHERE (b, h) IN (SELECT b, h FROM t2 WHERE pk > 0);
 
6806
pk
 
6807
1
 
6808
2
 
6809
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, i) IN (SELECT b, i FROM t2 WHERE pk > 0);
 
6810
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6811
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6812
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6813
Warnings:
 
6814
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`i` = `test`.`t1`.`i`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6815
SELECT pk FROM t1 WHERE (b, i) IN (SELECT b, i FROM t2 WHERE pk > 0);
 
6816
pk
 
6817
1
 
6818
2
 
6819
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, j) IN (SELECT b, j FROM t2 WHERE pk > 0);
 
6820
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6821
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6822
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6823
Warnings:
 
6824
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`j` = `test`.`t1`.`j`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6825
SELECT pk FROM t1 WHERE (b, j) IN (SELECT b, j FROM t2 WHERE pk > 0);
 
6826
pk
 
6827
1
 
6828
2
 
6829
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (b, k) IN (SELECT b, k FROM t2 WHERE pk > 0);
 
6830
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
6831
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
6832
1       SIMPLE  t2      range   PRIMARY PRIMARY 4       NULL    2       100.00  Using index condition; Using where; Using MRR; FirstMatch(t1)
 
6833
Warnings:
 
6834
Note    1003    /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`k` = `test`.`t1`.`k`) and (`test`.`t2`.`b` = `test`.`t1`.`b`) and (`test`.`t2`.`pk` > 0))
 
6835
SELECT pk FROM t1 WHERE (b, k) IN (SELECT b, k FROM t2 WHERE pk > 0);
 
6836
pk
 
6837
1
 
6838
2
 
6839
DROP TABLE t1, t2;
 
6840
# End of Bug#48213
 
6841
 
6842
# BUG#53060: LooseScan semijoin strategy does not return all rows
 
6843
 
6844
CREATE TABLE t1 (i INTEGER);
 
6845
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
 
6846
CREATE TABLE t2 (i INTEGER, j INTEGER, KEY k(i, j));
 
6847
INSERT INTO t2 VALUES (1, 0), (1, 1), (2, 0), (2, 1);
 
6848
EXPLAIN
 
6849
SELECT * FROM t1 WHERE (i) IN (SELECT i FROM t2 where j > 0);
 
6850
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6851
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    5       Using where
 
6852
1       SIMPLE  t2      ref     k       k       5       test.t1.i       1       Using where; Using index; FirstMatch(t1)
 
6853
SELECT * FROM t1 WHERE (i) IN (SELECT i FROM t2 where j > 0);
 
6854
i
 
6855
1
 
6856
2
 
6857
DROP TABLE t1, t2;
 
6858
# End of BUG#53060
 
6859
#
 
6860
# Bug#53305 "Duplicate weedout + join buffer (join cache --level=7,8) loses rows"
 
6861
#
 
6862
create table t1 (uid int, fid int, index(uid));
 
6863
insert into t1 values
 
6864
(1,1), (1,2), (1,3), (1,4),
 
6865
(2,5), (2,6), (2,7), (2,8),
 
6866
(3,1), (3,2), (3,9);
 
6867
create table t2 (uid int primary key, name varchar(128), index(name));
 
6868
insert into t2 values 
 
6869
(1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
 
6870
(6, "F"), (7, "G"), (8, "H"), (9, "I");
 
6871
create table t3 (uid int, fid int, index(uid));
 
6872
insert into t3 values
 
6873
(1,1), (1,2), (1,3),(1,4),
 
6874
(2,5), (2,6), (2,7), (2,8),
 
6875
(3,1), (3,2), (3,9);
 
6876
create table t4 (uid int primary key, name varchar(128), index(name));
 
6877
insert into t4 values 
 
6878
(1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
 
6879
(6, "F"), (7, "G"), (8, "H"), (9, "I");
 
6880
explain select name from t2, t1 
 
6881
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
 
6882
and t2.uid=t1.fid;
 
6883
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6884
1       SIMPLE  t3      ref     uid     uid     5       const   4       Using where; Start temporary
 
6885
1       SIMPLE  t4      eq_ref  PRIMARY PRIMARY 4       test.t3.fid     1       Using index
 
6886
1       SIMPLE  t1      ref     uid     uid     5       test.t3.fid     2       End temporary; Using join buffer (Batched Key Access)
 
6887
1       SIMPLE  t2      ALL     PRIMARY NULL    NULL    NULL    9       Using where
 
6888
select name from t2, t1 
 
6889
where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
 
6890
and t2.uid=t1.fid;
 
6891
name
 
6892
A
 
6893
A
 
6894
B
 
6895
B
 
6896
C
 
6897
D
 
6898
E
 
6899
F
 
6900
G
 
6901
H
 
6902
I
 
6903
drop table t1,t2,t3,t4;
 
6904
#
 
6905
# Bug#43768 Prepared query with nested subqueries core dump on second execution
 
6906
#
 
6907
CREATE TABLE t1 (
 
6908
id INT PRIMARY KEY,
 
6909
partner_id VARCHAR(35)
 
6910
);
 
6911
INSERT INTO t1 VALUES
 
6912
(1, 'partner1'), (2, 'partner2'),
 
6913
(3, 'partner3'), (4, 'partner4');
 
6914
CREATE TABLE t2 (
 
6915
id INT NOT NULL,
 
6916
t1_line_id INT,
 
6917
article_id VARCHAR(20),
 
6918
PRIMARY KEY(id, t1_line_id)
 
6919
);
 
6920
INSERT INTO t2 VALUES
 
6921
(1, 1, 'sup'), (2, 1, 'sup'),
 
6922
(2, 2, 'sup'), (2, 3, 'sup'),
 
6923
(2, 4, 'imp'), (3, 1, 'sup'),
 
6924
(4, 1, 'sup');
 
6925
CREATE TABLE t3 (
 
6926
user_id VARCHAR(50),
 
6927
article_id VARCHAR(20) NOT NULL,
 
6928
PRIMARY KEY(user_id)
 
6929
);
 
6930
INSERT INTO t3 VALUES('nicke', 'imp');
 
6931
EXPLAIN
 
6932
SELECT t1.partner_id
 
6933
FROM t1
 
6934
WHERE t1.id IN (
 
6935
SELECT t2.id
 
6936
FROM t2
 
6937
WHERE article_id IN (
 
6938
SELECT article_id FROM t3
 
6939
WHERE user_id = 'nicke'
 
6940
    )
 
6941
);
 
6942
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6943
1       SIMPLE  t3      system  PRIMARY NULL    NULL    NULL    1       NULL
 
6944
1       SIMPLE  t1      ALL     PRIMARY NULL    NULL    NULL    4       NULL
 
6945
1       SIMPLE  t2      ref     PRIMARY PRIMARY 4       test.t1.id      1       Using where; FirstMatch(t1); Using join buffer (Batched Key Access)
 
6946
SELECT t1.partner_id
 
6947
FROM t1
 
6948
WHERE t1.id IN (
 
6949
SELECT t2.id
 
6950
FROM t2
 
6951
WHERE article_id IN (
 
6952
SELECT article_id FROM t3
 
6953
WHERE user_id = 'nicke'
 
6954
    )
 
6955
);
 
6956
partner_id
 
6957
partner2
 
6958
PREPARE stmt FROM
 
6959
'EXPLAIN SELECT t1.partner_id
 
6960
FROM t1
 
6961
WHERE t1.id IN (
 
6962
    SELECT t2.id
 
6963
    FROM t2
 
6964
    WHERE article_id IN (
 
6965
      SELECT article_id FROM t3
 
6966
      WHERE user_id = \'nicke\'
 
6967
    )
 
6968
  )';
 
6969
EXECUTE stmt;
 
6970
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6971
1       SIMPLE  t3      system  PRIMARY NULL    NULL    NULL    1       NULL
 
6972
1       SIMPLE  t1      ALL     PRIMARY NULL    NULL    NULL    4       NULL
 
6973
1       SIMPLE  t2      ref     PRIMARY PRIMARY 4       test.t1.id      1       Using where; FirstMatch(t1); Using join buffer (Batched Key Access)
 
6974
EXECUTE stmt;
 
6975
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
6976
1       SIMPLE  t3      system  PRIMARY NULL    NULL    NULL    1       NULL
 
6977
1       SIMPLE  t1      ALL     PRIMARY NULL    NULL    NULL    4       NULL
 
6978
1       SIMPLE  t2      ref     PRIMARY PRIMARY 4       test.t1.id      1       Using where; FirstMatch(t1); Using join buffer (Batched Key Access)
 
6979
PREPARE stmt FROM
 
6980
'SELECT t1.partner_id
 
6981
FROM t1
 
6982
WHERE t1.id IN (
 
6983
    SELECT t2.id
 
6984
    FROM t2
 
6985
    WHERE article_id IN (
 
6986
      SELECT article_id FROM t3
 
6987
      WHERE user_id = \'nicke\'
 
6988
    )
 
6989
  )';
 
6990
EXECUTE stmt;
 
6991
partner_id
 
6992
partner2
 
6993
EXECUTE stmt;
 
6994
partner_id
 
6995
partner2
 
6996
DROP TABLE t1,t2,t3;
 
6997
# End of Bug#43768
 
6998
#
 
6999
# Bug#53058 - semijoin execution of subquery with outerjoin yields wrong result
 
7000
#
 
7001
CREATE TABLE t1 (i INTEGER);
 
7002
CREATE TABLE t2 (i INTEGER);
 
7003
CREATE TABLE t3 (i INTEGER);
 
7004
INSERT INTO t1 VALUES (1), (2);
 
7005
INSERT INTO t2 VALUES (6);
 
7006
INSERT INTO t3 VALUES (1), (2);
 
7007
explain extended SELECT * FROM t1 WHERE (t1.i) IN 
 
7008
(SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);
 
7009
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
7010
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    0.00    NULL
 
7011
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       100.00  Using where
 
7012
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       100.00  NULL
 
7013
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    1       100.00  Using where
 
7014
Warnings:
 
7015
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` = `<subquery2>`.`i`)
 
7016
SELECT * FROM t1 WHERE (t1.i) IN 
 
7017
(SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);
 
7018
i
 
7019
1
 
7020
2
 
7021
drop table t1,t2,t3;
 
7022
#
 
7023
# BUG#49453: re-execution of prepared statement with view 
 
7024
#            and semijoin crashes
 
7025
#
 
7026
CREATE TABLE t1 (city VARCHAR(50), country_id INT);
 
7027
CREATE TABLE t2 (country_id INT, country VARCHAR(50));
 
7028
INSERT INTO t1 VALUES 
 
7029
('Batna',2),('Bchar',2),('Skikda',2),('Tafuna',3),('Algeria',2) ;
 
7030
INSERT INTO t2 VALUES (2,'Algeria'),(2,'AlgeriaDup'),(3,'XAmerican Samoa');
 
7031
CREATE VIEW v1 AS 
 
7032
SELECT country_id as vf_country_id
 
7033
FROM t2
 
7034
WHERE LEFT(country,1) = "A";
 
7035
PREPARE stmt FROM "
 
7036
SELECT city, country_id
 
7037
FROM t1
 
7038
WHERE country_id IN (SELECT vf_country_id FROM v1);
 
7039
";
 
7040
 
 
7041
EXECUTE stmt;
 
7042
city    country_id
 
7043
Batna   2
 
7044
Bchar   2
 
7045
Skikda  2
 
7046
Algeria 2
 
7047
EXECUTE stmt;
 
7048
city    country_id
 
7049
Batna   2
 
7050
Bchar   2
 
7051
Skikda  2
 
7052
Algeria 2
 
7053
DROP TABLE t1,t2;
 
7054
DROP VIEW v1;
 
7055
#
 
7056
# Bug#54437 Extra rows with LEFT JOIN + semijoin (firstmatch
 
7057
# and duplicates weedout)
 
7058
#
 
7059
create table t1 (a int);
 
7060
create table t2 (a int);
 
7061
create table t3 (a int);
 
7062
insert into t1 values(1),(1);
 
7063
insert into t2 values(1),(1),(1),(1);
 
7064
insert into t3 values(2),(2);
 
7065
explain select * from t1 where t1.a in (select t2.a from t2 left join t3 on t2.a=t3.a);
 
7066
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7067
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7068
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t1.a       1       NULL
 
7069
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    4       NULL
 
7070
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7071
select * from t1 where t1.a in (select t2.a from t2 left join t3 on t2.a=t3.a);
 
7072
a
 
7073
1
 
7074
1
 
7075
drop table t1,t2,t3;
 
7076
#
 
7077
# Bug#55955: crash in MEMORY engine with IN(LEFT JOIN (JOIN))
 
7078
#
 
7079
CREATE TABLE t1 (a INT);
 
7080
CREATE TABLE t2 (a INT);
 
7081
CREATE TABLE t3 (a INT);
 
7082
INSERT INTO t1 VALUES(1),(1);
 
7083
INSERT INTO t2 VALUES(1),(1);
 
7084
INSERT INTO t3 VALUES(2),(2);
 
7085
explain SELECT * FROM t1
 
7086
WHERE t1.a IN (SELECT t2.a
 
7087
FROM t2 LEFT JOIN (t2 AS t2inner, t3) ON t2.a=t3.a);
 
7088
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7089
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7090
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t1.a       1       NULL
 
7091
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    2       NULL
 
7092
2       MATERIALIZED    t2inner ALL     NULL    NULL    NULL    NULL    2       NULL
 
7093
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7094
SELECT * FROM t1
 
7095
WHERE t1.a IN (SELECT t2.a
 
7096
FROM t2 LEFT JOIN (t2 AS t2inner, t3) ON t2.a=t3.a);
 
7097
a
 
7098
1
 
7099
1
 
7100
DROP TABLE t1,t2,t3;
 
7101
#
 
7102
# BUG#52329 - Wrong result: subquery materialization, IN, 
 
7103
#             non-null field followed by nullable
 
7104
#
 
7105
CREATE TABLE t1 (a1 CHAR(8) NOT NULL, a2 char(8) NOT NULL);
 
7106
CREATE TABLE t2a (b1 char(8), b2 char(8));
 
7107
CREATE TABLE t2b (b1 CHAR(8), b2 char(8) NOT NULL);
 
7108
CREATE TABLE t2c (b1 CHAR(8) NOT NULL, b2 char(8));
 
7109
INSERT INTO t1 VALUES ('1 - 12', '2 - 22');
 
7110
INSERT INTO t2a VALUES ('1 - 11', '2 - 21'),
 
7111
('1 - 11', '2 - 21'),
 
7112
('1 - 12', '2 - 22'),
 
7113
('1 - 12', '2 - 22'),
 
7114
('1 - 13', '2 - 23');
 
7115
INSERT INTO t2b SELECT * FROM t2a;
 
7116
INSERT INTO t2c SELECT * FROM t2a;
 
7117
SELECT * FROM t1
 
7118
WHERE (a1, a2) IN (
 
7119
SELECT b1, b2 FROM t2c WHERE b1 > '0' GROUP BY b1, b2);
 
7120
a1      a2
 
7121
1 - 12  2 - 22
 
7122
SELECT * FROM t1
 
7123
WHERE (a1, a2) IN (
 
7124
SELECT b1, b2 FROM t2a WHERE b1 > '0');
 
7125
a1      a2
 
7126
1 - 12  2 - 22
 
7127
SELECT * FROM t1
 
7128
WHERE (a1, a2) IN (
 
7129
SELECT b1, b2 FROM t2b WHERE b1 > '0');
 
7130
a1      a2
 
7131
1 - 12  2 - 22
 
7132
SELECT * FROM t1
 
7133
WHERE (a1, a2) IN (
 
7134
SELECT b1, b2 FROM t2c WHERE b1 > '0');
 
7135
a1      a2
 
7136
1 - 12  2 - 22
 
7137
DROP TABLE t1,t2a,t2b,t2c;
 
7138
# End BUG#52329
 
7139
#
 
7140
# Bug#45174: Incorrectly applied equality propagation caused wrong
 
7141
# result on a query with a materialized semi-join.
 
7142
#
 
7143
CREATE TABLE t1 (
 
7144
varchar_nokey varchar(1) NOT NULL
 
7145
);
 
7146
INSERT INTO t1 VALUES
 
7147
('v'), ('u'), ('n'), ('l'), ('h'), ('u'), ('n'), ('j'), ('k'),
 
7148
('e'), ('i'), ('u'), ('n'), ('b'), ('x'), (''), ('q'), ('u');
 
7149
CREATE TABLE t2 (
 
7150
pk int NOT NULL,
 
7151
varchar_key varchar(1) NOT NULL,
 
7152
varchar_nokey varchar(1) NOT NULL,
 
7153
PRIMARY KEY(pk),
 
7154
KEY varchar_key(varchar_key)
 
7155
);
 
7156
INSERT INTO t2 VALUES
 
7157
(11,'m','m'), (12,'j','j'), (13,'z','z'), (14,'a','a'), (15,'',''),
 
7158
(16,'e','e'), (17,'t','t'), (19,'b','b'), (20,'w','w'), (21,'m','m'),
 
7159
(23,'',''), (24,'w','w'), (26,'e','e'), (27,'e','e'), (28,'p','p');
 
7160
SELECT varchar_nokey
 
7161
FROM t1
 
7162
WHERE (varchar_nokey, varchar_nokey) IN (SELECT varchar_key, varchar_nokey
 
7163
FROM t2  
 
7164
WHERE varchar_nokey < 'n' XOR pk);
 
7165
varchar_nokey
 
7166
explain SELECT varchar_nokey
 
7167
FROM t1
 
7168
WHERE (varchar_nokey, varchar_nokey) IN (SELECT varchar_key, varchar_nokey
 
7169
FROM t2  
 
7170
WHERE varchar_nokey < 'n' XOR pk);
 
7171
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7172
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    18      Using where
 
7173
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      6       test.t1.varchar_nokey,test.t1.varchar_nokey     1       NULL
 
7174
2       MATERIALIZED    t2      ALL     varchar_key     NULL    NULL    NULL    15      Using where
 
7175
DROP TABLE t1, t2;
 
7176
# End of the test for bug#45174.
 
7177
#
 
7178
# Bug#50019: Wrong result for IN-query with materialization
 
7179
#
 
7180
CREATE TABLE t1(i INT);
 
7181
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
 
7182
CREATE TABLE t2(i INT);
 
7183
INSERT INTO t2 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
 
7184
CREATE TABLE t3(i INT);
 
7185
INSERT INTO t3 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
 
7186
SELECT * FROM t1 WHERE t1.i IN (SELECT t2.i
 
7187
FROM t2 JOIN t3
 
7188
WHERE t2.i + t3.i = 5);
 
7189
i
 
7190
1
 
7191
2
 
7192
3
 
7193
4
 
7194
explain SELECT * FROM t1 WHERE t1.i IN (SELECT t2.i
 
7195
FROM t2 JOIN t3
 
7196
WHERE t2.i + t3.i = 5);
 
7197
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7198
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    10      Using where
 
7199
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.t1.i       1       NULL
 
7200
2       MATERIALIZED    t2      ALL     NULL    NULL    NULL    NULL    10      NULL
 
7201
2       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    10      Using where
 
7202
DROP TABLE t1,t2,t3;
 
7203
# End of the test for bug#50019.
 
7204
#
 
7205
# Bug#52068: Optimizer generates invalid semijoin materialization plan
 
7206
#
 
7207
CREATE TABLE ot1(a INTEGER);
 
7208
INSERT INTO ot1 VALUES(5), (8);
 
7209
CREATE TABLE it2(a INTEGER);
 
7210
INSERT INTO it2 VALUES(9), (5), (1), (8);
 
7211
CREATE TABLE it3(a INTEGER);
 
7212
INSERT INTO it3 VALUES(7), (1), (0), (5), (1), (4);
 
7213
CREATE TABLE ot4(a INTEGER);
 
7214
INSERT INTO ot4 VALUES(1), (3), (5), (7), (9), (7), (3), (1);
 
7215
SELECT * FROM ot1,ot4
 
7216
WHERE (ot1.a,ot4.a) IN (SELECT it2.a,it3.a
 
7217
FROM it2,it3);
 
7218
a       a
 
7219
5       7
 
7220
5       7
 
7221
5       1
 
7222
5       1
 
7223
5       5
 
7224
8       7
 
7225
8       7
 
7226
8       1
 
7227
8       1
 
7228
8       5
 
7229
explain SELECT * FROM ot1,ot4
 
7230
WHERE (ot1.a,ot4.a) IN (SELECT it2.a,it3.a
 
7231
FROM it2,it3);
 
7232
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7233
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    2       NULL
 
7234
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
7235
1       SIMPLE  ot4     ALL     NULL    NULL    NULL    NULL    8       Using where
 
7236
2       MATERIALIZED    it2     ALL     NULL    NULL    NULL    NULL    4       NULL
 
7237
2       MATERIALIZED    it3     ALL     NULL    NULL    NULL    NULL    6       NULL
 
7238
DROP TABLE IF EXISTS ot1, ot4, it2, it3;
 
7239
# End of the test for bug#52068.
 
7240
#
 
7241
# Bug#57623: subquery within before insert trigger causes crash (sj=on)
 
7242
#
 
7243
CREATE TABLE ot1(a INT);
 
7244
CREATE TABLE ot2(a INT);
 
7245
CREATE TABLE ot3(a INT);
 
7246
CREATE TABLE it1(a INT);
 
7247
INSERT INTO ot1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
 
7248
INSERT INTO ot2 VALUES(0),(2),(4),(6);
 
7249
INSERT INTO ot3 VALUES(0),(3),(6);
 
7250
INSERT INTO it1 VALUES(0),(1),(2),(3),(4),(5),(6),(7);
 
7251
explain SELECT *
 
7252
FROM   ot1
 
7253
LEFT JOIN
 
7254
(ot2 JOIN ot3 on ot2.a=ot3.a)
 
7255
ON ot1.a=ot2.a AND ot1.a IN (SELECT a from it1);
 
7256
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7257
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    8       NULL
 
7258
1       SIMPLE  it1     ALL     NULL    NULL    NULL    NULL    8       Using where; FirstMatch(ot1)
 
7259
1       SIMPLE  ot3     ALL     NULL    NULL    NULL    NULL    3       NULL
 
7260
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    4       Using where
 
7261
SELECT *
 
7262
FROM   ot1
 
7263
LEFT JOIN
 
7264
(ot2 JOIN ot3 on ot2.a=ot3.a)
 
7265
ON ot1.a=ot2.a AND ot1.a IN (SELECT a from it1);
 
7266
a       a       a
 
7267
0       0       0
 
7268
1       NULL    NULL
 
7269
2       NULL    NULL
 
7270
3       NULL    NULL
 
7271
4       NULL    NULL
 
7272
5       NULL    NULL
 
7273
6       6       6
 
7274
7       NULL    NULL
 
7275
prepare s from 'SELECT *
 
7276
FROM   ot1
 
7277
LEFT JOIN
 
7278
(ot2 JOIN ot3 on ot2.a=ot3.a)
 
7279
ON ot1.a=ot2.a AND ot1.a IN (SELECT a from it1)';
 
7280
execute s;
 
7281
a       a       a
 
7282
0       0       0
 
7283
1       NULL    NULL
 
7284
2       NULL    NULL
 
7285
3       NULL    NULL
 
7286
4       NULL    NULL
 
7287
5       NULL    NULL
 
7288
6       6       6
 
7289
7       NULL    NULL
 
7290
execute s;
 
7291
a       a       a
 
7292
0       0       0
 
7293
1       NULL    NULL
 
7294
2       NULL    NULL
 
7295
3       NULL    NULL
 
7296
4       NULL    NULL
 
7297
5       NULL    NULL
 
7298
6       6       6
 
7299
7       NULL    NULL
 
7300
deallocate prepare s;
 
7301
DROP TABLE ot1, ot2, ot3, it1;
 
7302
# End of the test for bug#57623.
 
7303
#
 
7304
# Bug#11766739: Crash in tmp_table_param::init() with semijoin=on
 
7305
#
 
7306
CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM;
 
7307
CREATE TABLE t2 (f1 INTEGER, f2 INTEGER) ENGINE=MyISAM;
 
7308
INSERT INTO t1 VALUES (1);
 
7309
INSERT INTO t2 VALUES (1,1), (2,1);
 
7310
EXPLAIN SELECT * FROM t2
 
7311
WHERE f2 IN (SELECT t1.f1
 
7312
FROM t1 LEFT OUTER JOIN (t2 AS b1 JOIN t2 AS b2 ON TRUE) ON TRUE);
 
7313
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7314
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    1       Start temporary
 
7315
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7316
1       SIMPLE  b1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7317
1       SIMPLE  b2      ALL     NULL    NULL    NULL    NULL    2       End temporary
 
7318
SELECT * FROM t2
 
7319
WHERE f2 IN (SELECT t1.f1
 
7320
FROM t1 LEFT OUTER JOIN (t2 AS b1 JOIN t2 AS b2 ON TRUE) ON TRUE);
 
7321
f1      f2
 
7322
1       1
 
7323
2       1
 
7324
DROP TABLE t1, t2;
 
7325
# End of the test for bug#11766739.
 
7326
#
 
7327
# Bug#11766642: crash in Item_field::register_field_in_read_map with view
 
7328
#
 
7329
CREATE TABLE t1(a INT);
 
7330
CREATE VIEW v1 AS SELECT a FROM t1;
 
7331
INSERT INTO t1 VALUES (0),(1),(2);
 
7332
SELECT a FROM t1 WHERE a IN 
 
7333
(SELECT a XOR a FROM v1)
 
7334
ORDER BY a;
 
7335
a
 
7336
0
 
7337
DROP TABLE t1;
 
7338
DROP VIEW v1;
 
7339
#
 
7340
# Bug#12546542 MISSING ROW WHEN USING OPTIMIZER_JOIN_CACHE_LEVEL>=3
 
7341
#
 
7342
CREATE TABLE t1 (
 
7343
f2 varchar(1024)
 
7344
);
 
7345
INSERT INTO t1 VALUES ('v'),('we');
 
7346
CREATE TABLE t2 (
 
7347
col_varchar_1024_utf8 varchar(1024) CHARACTER SET utf8 DEFAULT NULL,
 
7348
col_int_key int,
 
7349
col_int int
 
7350
);
 
7351
INSERT INTO t2 VALUES ('we',4,NULL),('v',1305673728,6);
 
7352
CREATE TABLE t3 (
 
7353
col_int_key int,
 
7354
col_int int
 
7355
);
 
7356
INSERT INTO t3 VALUES (4,4);
 
7357
SELECT *
 
7358
FROM t1
 
7359
WHERE f2 IN (SELECT a1.col_varchar_1024_utf8 AS f2
 
7360
FROM t2 AS a1 LEFT JOIN t3 AS a2
 
7361
ON a1.col_int_key = a2.col_int_key
 
7362
WHERE a1.col_int BETWEEN 1 AND 10 OR a2.col_int IS NOT NULL);
 
7363
f2
 
7364
v
 
7365
we
 
7366
DROP TABLE t1,t2,t3;
 
7367
#
 
7368
# BUG#12616344 - JCL: DIFFERENT RESULT SET AND DIFFERENT AMOUNT
 
7369
# OF ROWS WHEN JCL>=3
 
7370
#
 
7371
CREATE TABLE t1 (col_int_nokey int, col_int_key int, col_varchar_key varchar(1));
 
7372
INSERT INTO t1 VALUES (0,4,'c'),(1,6,'u');
 
7373
CREATE TABLE t2 (pk int, col_int_nokey int, col_varchar_nokey varchar(1));
 
7374
INSERT INTO t2 VALUES (1,4,'b'),(94,6,'u');
 
7375
CREATE TABLE t3 (pk int, col_int_nokey int, col_varchar_key varchar(1));
 
7376
INSERT INTO t3 VALUES (1,4,'j'),(2,6,'v');
 
7377
SELECT table2.col_int_key
 
7378
from t3 as table1 join t1 as table2 on table2.col_int_nokey 
 
7379
where table1.col_int_nokey in 
 
7380
 
7381
select subquery2_t2.col_int_nokey 
 
7382
from t3 as subquery2_t1 
 
7383
right join
 
7384
t2 as subquery2_t2
 
7385
join t1 as subquery2_t3
 
7386
on subquery2_t3.col_int_key = subquery2_t2.col_int_nokey
 
7387
on subquery2_t3.col_varchar_key = subquery2_t2.col_varchar_nokey 
 
7388
where subquery2_t1.col_varchar_key != table1.col_varchar_key
 
7389
or subquery2_t2.pk <= table1.pk
 
7390
);
 
7391
col_int_key
 
7392
6
 
7393
6
 
7394
DROP TABLE t1,t2,t3;
 
7395
#
 
7396
# Bug#12608157: ASSERT IN FIELD_LONG::VAL_INT WHEN USING MEMORY ENGINE
 
7397
#
 
7398
CREATE TABLE t1 (i1 int);
 
7399
INSERT INTO t1 VALUES (1);
 
7400
CREATE TABLE t2 (i1 int, i2 int) ENGINE=memory;
 
7401
INSERT INTO t2 VALUES (1, 2),(7, 3);
 
7402
SELECT GRANDPARENT1.i1
 
7403
FROM t2 AS GRANDPARENT1 
 
7404
WHERE GRANDPARENT1.i2
 
7405
IN ( SELECT PARENT1.i2
 
7406
FROM t2 AS PARENT1 JOIN t1 AS PARENT2 ON (PARENT1.i1 = PARENT2.i1)
 
7407
WHERE 
 
7408
GRANDPARENT1.i1 IN ( SELECT CHILD1.i1 FROM t2 AS CHILD1 )
 
7409
ORDER BY PARENT1.i1)
 
7410
ORDER BY GRANDPARENT1.i2 ;
 
7411
i1
 
7412
1
 
7413
DROP TABLE t1,t2;
 
7414
#
 
7415
# Bug#12640083: Same query executed as WHERE subquery gives different
 
7416
#              results on IN() compare
 
7417
#
 
7418
CREATE TABLE t1 (
 
7419
pk int NOT NULL,
 
7420
col_varchar_1024_utf8_key varchar(1024) CHARACTER SET utf8 DEFAULT NULL,
 
7421
col_varchar_10_latin1_key varchar(10) DEFAULT NULL,
 
7422
PRIMARY KEY (pk),
 
7423
KEY col_varchar_1024_utf8_key(col_varchar_1024_utf8_key(333)),
 
7424
KEY col_varchar_10_latin1_key(col_varchar_10_latin1_key)
 
7425
);
 
7426
INSERT INTO t1 VALUES
 
7427
(1, 'a', 'a'),
 
7428
(2, 'ab', 'ab'),
 
7429
(3, 'abc', 'abc'),
 
7430
(4, 'abcd', 'abcd');
 
7431
CREATE TABLE t2 (
 
7432
pk int NOT NULL AUTO_INCREMENT,
 
7433
PRIMARY KEY (pk)
 
7434
) ENGINE=Innodb;
 
7435
CREATE TABLE t3
 
7436
SELECT alias1.col_varchar_10_latin1_key
 
7437
FROM t1 AS alias1
 
7438
LEFT JOIN t1 AS alias2
 
7439
JOIN t2 AS alias3
 
7440
ON alias2.col_varchar_10_latin1_key
 
7441
ON alias1.col_varchar_1024_utf8_key
 
7442
WHERE alias1.pk AND alias1.pk < 3 OR alias1.pk AND alias3.pk;
 
7443
EXPLAIN SELECT * 
 
7444
FROM t3 
 
7445
WHERE col_varchar_10_latin1_key IN (
 
7446
SELECT alias1.col_varchar_10_latin1_key 
 
7447
FROM t1 AS alias1
 
7448
LEFT JOIN t1 AS alias2
 
7449
JOIN t2 AS alias3
 
7450
ON alias2.col_varchar_10_latin1_key
 
7451
ON alias1.col_varchar_1024_utf8_key
 
7452
WHERE alias1.pk AND alias1.pk < 3 OR alias1.pk AND alias3.pk);
 
7453
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7454
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7455
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      13      test.t3.col_varchar_10_latin1_key       1       NULL
 
7456
2       MATERIALIZED    alias1  ALL     NULL    NULL    NULL    NULL    4       Using where
 
7457
2       MATERIALIZED    alias3  index   NULL    PRIMARY 4       NULL    1       Using where; Using index
 
7458
2       MATERIALIZED    alias2  index   NULL    col_varchar_10_latin1_key       13      NULL    4       Using where; Using index
 
7459
SELECT * 
 
7460
FROM t3 
 
7461
WHERE col_varchar_10_latin1_key IN (
 
7462
SELECT alias1.col_varchar_10_latin1_key 
 
7463
FROM t1 AS alias1
 
7464
LEFT JOIN t1 AS alias2
 
7465
JOIN t2 AS alias3
 
7466
ON alias2.col_varchar_10_latin1_key
 
7467
ON alias1.col_varchar_1024_utf8_key
 
7468
WHERE alias1.pk AND alias1.pk < 3 OR alias1.pk AND alias3.pk);
 
7469
col_varchar_10_latin1_key
 
7470
a
 
7471
ab
 
7472
DROP TABLE t1, t2, t3;
 
7473
# End of the test for bug#12640083.
 
7474
#
 
7475
# Bug#12603200 - Assert in QUICK_INDEX_MERGE_SELECT::need_sorted_output
 
7476
#
 
7477
CREATE TABLE t1 (
 
7478
pk int NOT NULL,
 
7479
col_int_key int NOT NULL,
 
7480
col_varchar_nokey varchar(1) NOT NULL,
 
7481
col_varchar_key varchar(1) NOT NULL,
 
7482
PRIMARY KEY(pk),
 
7483
KEY col_int_key(col_int_key),
 
7484
KEY col_varchar_key(col_varchar_key, col_int_key)
 
7485
) engine=innodb;
 
7486
INSERT INTO t1 VALUES
 
7487
(1,7,'a','a'),
 
7488
(2,0,'v','v'),
 
7489
(3,9,'c','c'),
 
7490
(4,3,'m','m'),
 
7491
(5,2,'a','a'),
 
7492
(6,1,'d','d'),
 
7493
(7,8,'y','y'),
 
7494
(8,6,'t','t'),
 
7495
(11,7,'a','x'),
 
7496
(12,0,'v','v'),
 
7497
(13,9,'c','c'),
 
7498
(14,3,'m','m'),
 
7499
(15,2,'a','x'),
 
7500
(16,1,'d','d'),
 
7501
(17,8,'y','y'),
 
7502
(18,6,'t','u');
 
7503
CREATE TABLE t2 (
 
7504
pk int NOT NULL,
 
7505
col_int_key int NOT NULL,
 
7506
col_varchar_key varchar(1) NOT NULL,
 
7507
PRIMARY KEY(pk),
 
7508
KEY col_varchar_key(col_varchar_key, col_int_key)
 
7509
) engine=innodb;
 
7510
INSERT INTO t2(pk,col_int_key,col_varchar_key) VALUES
 
7511
(8,7,'c'),
 
7512
(11,4,'l'),
 
7513
(12,7,'b'),
 
7514
(13,0,'c'),
 
7515
(14,2,'i'),
 
7516
(15,9,'h'),
 
7517
(16,4,'q'),
 
7518
(17,1,'m'),
 
7519
(18,9,'b'),
 
7520
(19,2,'e'),
 
7521
(20,1,'c'),
 
7522
(21,7,'z'),
 
7523
(22,4,'l'),
 
7524
(23,7,'z'),
 
7525
(24,0,'c'),
 
7526
(25,2,'i'),
 
7527
(26,9,'h'),
 
7528
(27,4,'q'),
 
7529
(28,0,'a'),
 
7530
(29,1,'d');
 
7531
EXPLAIN SELECT outr.col_varchar_key AS x, outr.pk AS y
 
7532
FROM t1 AS outr
 
7533
WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key
 
7534
FROM t2 AS innr
 
7535
WHERE innr.col_varchar_key = 'a' OR innr.pk = 8)
 
7536
AND outr.col_varchar_nokey < 't'
 
7537
ORDER BY outr.col_varchar_key, outr.pk;
 
7538
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7539
1       SIMPLE  innr    index_merge     PRIMARY,col_varchar_key col_varchar_key,PRIMARY 3,4     NULL    2       Using sort_union(col_varchar_key,PRIMARY); Using where; Using temporary; Using filesort; Start temporary
 
7540
1       SIMPLE  outr    ref     col_varchar_key col_varchar_key 3       test.innr.col_varchar_key       1       Using where; End temporary; Using join buffer (Batched Key Access)
 
7541
SELECT outr.col_varchar_key AS x, outr.pk AS y
 
7542
FROM t1 AS outr
 
7543
WHERE outr.col_varchar_key IN (SELECT innr.col_varchar_key
 
7544
FROM t2 AS innr
 
7545
WHERE innr.col_varchar_key = 'a' OR innr.pk = 8)
 
7546
AND outr.col_varchar_nokey < 't'
 
7547
ORDER BY outr.col_varchar_key, outr.pk;
 
7548
x       y
 
7549
a       1
 
7550
a       5
 
7551
c       3
 
7552
c       13
 
7553
DROP TABLE t1, t2;
 
7554
# End of bug#12603200
 
7555
#
 
7556
# Bug#12603183: Segfault in hp_movelink
 
7557
#
 
7558
CREATE TABLE t1 (
 
7559
col_varchar_key varchar(1) ,
 
7560
col_varchar_nokey varchar(1) ,
 
7561
KEY col_varchar_key(col_varchar_key)
 
7562
);
 
7563
INSERT INTO t1 VALUES
 
7564
('i','i'),
 
7565
('h','h'),
 
7566
('q','q'),
 
7567
('a','a'),
 
7568
('v','v'),
 
7569
('u','u'),
 
7570
('s','s'),
 
7571
('y','y'),
 
7572
('z','z'),
 
7573
('h','h'),
 
7574
('p','p'),
 
7575
('e','e'),
 
7576
('i','i'),
 
7577
('y','y'),
 
7578
('w','w');
 
7579
CREATE TABLE t2 (
 
7580
col_varchar_nokey varchar(1)
 
7581
);
 
7582
INSERT INTO t2 VALUES
 
7583
('b');
 
7584
EXPLAIN SELECT grandparent1.col_varchar_nokey
 
7585
FROM t1 AS grandparent1 LEFT JOIN t2 AS grandparent2 USING (col_varchar_nokey)
 
7586
WHERE (grandparent1.col_varchar_key) IN
 
7587
(SELECT parent1.col_varchar_nokey
 
7588
FROM t1 AS parent1
 
7589
WHERE parent1.col_varchar_key IN
 
7590
(SELECT child1.col_varchar_nokey AS c1
 
7591
FROM t1 AS child1 LEFT JOIN t2 AS child2
 
7592
ON (child1.col_varchar_key > child2.col_varchar_nokey)));
 
7593
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7594
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
7595
1       SIMPLE  grandparent1    ref     col_varchar_key col_varchar_key 4       <subquery2>.col_varchar_nokey   2       Using join buffer (Batched Key Access)
 
7596
1       SIMPLE  grandparent2    ALL     NULL    NULL    NULL    NULL    1       Using where
 
7597
2       MATERIALIZED    child1  ALL     NULL    NULL    NULL    NULL    15      Using where
 
7598
2       MATERIALIZED    child2  ALL     NULL    NULL    NULL    NULL    1       Using where
 
7599
2       MATERIALIZED    parent1 ref     col_varchar_key col_varchar_key 4       test.child1.col_varchar_nokey   2       Using join buffer (Batched Key Access)
 
7600
SELECT grandparent1.col_varchar_nokey
 
7601
FROM t1 AS grandparent1 LEFT JOIN t2 AS grandparent2 USING (col_varchar_nokey)
 
7602
WHERE (grandparent1.col_varchar_key) IN
 
7603
(SELECT parent1.col_varchar_nokey
 
7604
FROM t1 AS parent1
 
7605
WHERE parent1.col_varchar_key IN
 
7606
(SELECT child1.col_varchar_nokey AS c1
 
7607
FROM t1 AS child1 LEFT JOIN t2 AS child2
 
7608
ON (child1.col_varchar_key > child2.col_varchar_nokey)));
 
7609
col_varchar_nokey
 
7610
a
 
7611
e
 
7612
h
 
7613
h
 
7614
i
 
7615
i
 
7616
p
 
7617
q
 
7618
s
 
7619
u
 
7620
v
 
7621
w
 
7622
y
 
7623
y
 
7624
z
 
7625
DROP TABLE t1, t2;
 
7626
# End of test for bug#12603183.
 
7627
#
 
7628
# Bug#12818569: Diff nr of rows returned when using IN/ALL+subquery
 
7629
#
 
7630
CREATE TABLE t1 (
 
7631
col_int_key INT NOT NULL,
 
7632
col_datetime_key DATETIME NOT NULL,
 
7633
col_varchar_key VARCHAR(1) NOT NULL,
 
7634
KEY col_int_key (col_int_key),
 
7635
KEY col_datetime_key(col_datetime_key),
 
7636
KEY col_varchar_key (col_varchar_key,col_int_key)
 
7637
) ENGINE=InnoDB;
 
7638
INSERT INTO t1 VALUES
 
7639
(7,'2004-06-06 04:22:12','v'), (0,'2005-11-13 01:12:31','s'),
 
7640
(9,'2002-05-04 01:50:00','l'), (3,'2004-10-27 10:28:45','y'),
 
7641
(4,'2006-07-22 05:24:23','c'), (2,'2002-05-16 21:34:03','i'),
 
7642
(5,'2008-04-17 10:45:30','h'), (3,'2009-04-21 02:58:02','q'),
 
7643
(1,'2008-01-11 11:01:51','a'), (3,'1900-01-01 00:00:00','v'),
 
7644
(6,'2007-05-17 18:24:57','u'), (7,'2007-08-07 00:00:00','s'),
 
7645
(5,'2001-08-28 00:00:00','y'), (1,'2004-04-16 00:27:28','z'),
 
7646
(204,'2005-05-03 07:06:22','h'), (224,'2009-03-11 17:09:50','p'),
 
7647
(9,'2007-12-08 01:54:28','e'), (5,'2009-07-28 18:19:54','i'),
 
7648
(0,'2008-06-08 00:00:00','y'), (3,'2005-02-09 09:20:26','w');
 
7649
CREATE TABLE t2 (
 
7650
col_varchar_nokey VARCHAR(1) NOT NULL
 
7651
) ENGINE=InnoDB;
 
7652
INSERT INTO t2 VALUES ('v'), ('y'), ('j'), ('c'), ('d'), ('r');
 
7653
explain SELECT col_varchar_key
 
7654
FROM t1
 
7655
WHERE col_varchar_key IN (SELECT col_varchar_nokey
 
7656
FROM t2)
 
7657
ORDER BY col_datetime_key LIMIT 4;
 
7658
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7659
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    6       Using temporary; Using filesort; Start temporary
 
7660
1       SIMPLE  t1      ref     col_varchar_key col_varchar_key 3       test.t2.col_varchar_nokey       1       End temporary; Using join buffer (Batched Key Access)
 
7661
SELECT col_varchar_key
 
7662
FROM t1
 
7663
WHERE col_varchar_key IN (SELECT col_varchar_nokey
 
7664
FROM t2)
 
7665
ORDER BY col_datetime_key LIMIT 4;
 
7666
col_varchar_key
 
7667
v
 
7668
y
 
7669
v
 
7670
y
 
7671
DROP TABLE t1, t2;
 
7672
# End of test for bug#12818569.
 
7673
#
 
7674
# Bug#12803439: Assert in replace_subcondition() on update query
 
7675
#
 
7676
CREATE TABLE t1(a INTEGER);
 
7677
INSERT INTO t1 values(1), (2);
 
7678
CREATE TABLE t2(a INTEGER);
 
7679
INSERT INTO t2 VALUES(1), (3);
 
7680
SELECT *
 
7681
FROM t1
 
7682
WHERE a IN (SELECT a
 
7683
FROM t2
 
7684
HAVING a IN (SELECT a
 
7685
FROM t2)
 
7686
)
 
7687
HAVING a IN (SELECT a
 
7688
FROM t2);
 
7689
a
 
7690
1
 
7691
DROP TABLE t1, t2;
 
7692
# End of test for bug#12803439.
 
7693
#
 
7694
# Bug#12797534: Segfault in hp_movelink still exists
 
7695
#
 
7696
CREATE TABLE t1 (
 
7697
g1 VARCHAR(1) NOT NULL
 
7698
) ENGINE=InnoDB;
 
7699
INSERT INTO t1 VALUES ('d'), ('s');
 
7700
CREATE TABLE t2 (
 
7701
pk INT NOT NULL,
 
7702
col_int_key INT NOT NULL,
 
7703
col_varchar_key VARCHAR(1) NOT NULL,
 
7704
col_varchar_nokey VARCHAR(1) NOT NULL,
 
7705
PRIMARY KEY (pk),
 
7706
KEY col_varchar_key(col_varchar_key, col_int_key)
 
7707
) ENGINE=InnoDB;
 
7708
INSERT INTO t2 VALUES
 
7709
(1,4,'j','j'), (2,6,'v','v'), (3,3,'c','c'), (4,5,'m','m'),
 
7710
(5,3,'d','d'), (6,246,'d','d'), (7,2,'y','y'), (8,9,'t','t'),
 
7711
(9,3,'d','d'), (10,8,'s','s'), (11,1,'r','r'), (12,8,'m','m'),
 
7712
(13,8,'b','b'), (14,5,'x','x'), (15,7,'g','g'), (16,5,'p','p'),
 
7713
(17,1,'q','q'), (18,6,'w','w'), (19,2,'d','d'), (20,9,'e','e');
 
7714
CREATE TABLE t3 (
 
7715
pk INTEGER NOT NULL,
 
7716
PRIMARY KEY (pk)
 
7717
) ENGINE=InnoDB;
 
7718
INSERT INTO t3 VALUES (10);
 
7719
EXPLAIN SELECT *
 
7720
FROM t1
 
7721
WHERE g1 NOT IN
 
7722
(SELECT  grandparent1.col_varchar_nokey AS g1
 
7723
FROM t2 AS grandparent1
 
7724
WHERE grandparent1.col_varchar_key IN
 
7725
(SELECT parent1.col_varchar_nokey AS p1
 
7726
FROM t2 AS parent1 LEFT JOIN t3 AS parent2 USING (pk)
 
7727
)
 
7728
AND grandparent1.col_varchar_key IS NOT NULL
 
7729
);
 
7730
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7731
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7732
2       SUBQUERY        parent1 ALL     NULL    NULL    NULL    NULL    20      Start temporary
 
7733
2       SUBQUERY        parent2 eq_ref  PRIMARY PRIMARY 4       test.parent1.pk 1       Using index
 
7734
2       SUBQUERY        grandparent1    ref     col_varchar_key col_varchar_key 3       test.parent1.col_varchar_nokey  1       Using index condition; End temporary; Using join buffer (Batched Key Access)
 
7735
SELECT *
 
7736
FROM t1
 
7737
WHERE g1 NOT IN
 
7738
(SELECT  grandparent1.col_varchar_nokey AS g1
 
7739
FROM t2 AS grandparent1
 
7740
WHERE grandparent1.col_varchar_key IN
 
7741
(SELECT parent1.col_varchar_nokey AS p1
 
7742
FROM t2 AS parent1 LEFT JOIN t3 AS parent2 USING (pk)
 
7743
)
 
7744
AND grandparent1.col_varchar_key IS NOT NULL
 
7745
);
 
7746
g1
 
7747
DROP TABLE t1, t2, t3;
 
7748
CREATE TABLE t1 (
 
7749
pk INTEGER AUTO_INCREMENT,
 
7750
col_int_key INTEGER ,
 
7751
col_varchar_key VARCHAR(1) ,
 
7752
col_varchar_nokey VARCHAR(1) ,
 
7753
PRIMARY KEY (pk),
 
7754
KEY (col_varchar_key,col_int_key)
 
7755
) ENGINE=INNODB;
 
7756
INSERT INTO t1 (col_int_key,col_varchar_key,col_varchar_nokey) VALUES
 
7757
(0,'x','x'), (1,'j','j'), (1,'r','r'), (9,'v','v'), (5,'r','r');
 
7758
CREATE TABLE t2 (
 
7759
pk INTEGER AUTO_INCREMENT,
 
7760
col_int_key INTEGER ,
 
7761
col_varchar_key VARCHAR(1) ,
 
7762
col_varchar_nokey VARCHAR(1) ,
 
7763
PRIMARY KEY (pk),
 
7764
KEY (col_int_key),
 
7765
KEY (col_varchar_key,col_int_key)
 
7766
) AUTO_INCREMENT=10 ENGINE=INNODB;
 
7767
INSERT INTO t2 (col_int_key, col_varchar_key, col_varchar_nokey) VALUES
 
7768
(NULL,'x','x'), (NULL,'j','j'), (8,'c','c');
 
7769
CREATE TABLE t3
 
7770
SELECT outr.col_varchar_nokey AS x
 
7771
FROM t1 AS outr
 
7772
WHERE outr.col_varchar_nokey IN
 
7773
(SELECT innr.col_varchar_nokey AS y
 
7774
FROM t2 AS innr
 
7775
WHERE innr.col_int_key IS NULL)
 
7776
AND outr.col_varchar_nokey IS NOT NULL
 
7777
AND NOT col_varchar_key IS NULL;
 
7778
SELECT *
 
7779
FROM t3
 
7780
WHERE x NOT IN
 
7781
(SELECT outr.col_varchar_nokey AS x
 
7782
FROM t1 AS outr
 
7783
WHERE outr.col_varchar_nokey IN
 
7784
(SELECT innr.col_varchar_nokey AS y
 
7785
FROM t2 AS innr
 
7786
WHERE innr.col_int_key IS NULL)
 
7787
AND outr.col_varchar_nokey IS NOT NULL
 
7788
AND NOT col_varchar_key IS NULL);
 
7789
x
 
7790
DROP TABLE t1, t2, t3;
 
7791
# End of test for bug#12797534.
 
7792
#
 
7793
# Bug#12714094: Assert in optimize_semijoin_nests()
 
7794
#
 
7795
CREATE TABLE it (
 
7796
pk int NOT NULL,
 
7797
col_varchar VARCHAR(10) DEFAULT NULL,
 
7798
PRIMARY KEY (pk)
 
7799
) ENGINE=MyISAM;
 
7800
INSERT INTO it VALUES (1, 'g');
 
7801
CREATE TABLE ot
 
7802
SELECT alias1.pk AS field1
 
7803
FROM it AS alias1
 
7804
LEFT JOIN it AS alias2
 
7805
ON alias1.col_varchar = alias2.col_varchar
 
7806
;
 
7807
SELECT *
 
7808
FROM ot
 
7809
WHERE field1 IN (
 
7810
SELECT alias1.pk
 
7811
FROM it AS alias1
 
7812
LEFT JOIN it AS alias2
 
7813
ON alias1.col_varchar = alias2.col_varchar
 
7814
);
 
7815
field1
 
7816
1
 
7817
DROP TABLE it, ot;
 
7818
# End of test for bug#12714094
 
7819
#
 
7820
# Bug#12867557: Valgrind: conditional jump/move at key_cmp
 
7821
#
 
7822
CREATE TABLE t1 (
 
7823
pk INTEGER AUTO_INCREMENT,
 
7824
col_int_key INTEGER,
 
7825
PRIMARY KEY (pk),
 
7826
KEY (col_int_key)
 
7827
) AUTO_INCREMENT=10;
 
7828
INSERT INTO t1 (col_int_key) VALUES (8);
 
7829
CREATE TABLE t2 (
 
7830
pk INTEGER AUTO_INCREMENT,
 
7831
col_int_key INTEGER,
 
7832
col_time_key TIME,
 
7833
PRIMARY KEY (pk),
 
7834
KEY (col_int_key),
 
7835
KEY (col_time_key)
 
7836
)  AUTO_INCREMENT=10;
 
7837
INSERT INTO t2 (col_int_key, col_time_key)
 
7838
VALUES
 
7839
(8, '22:55:23.019225'), (7, '10:19:31.050677'), (1, '14:40:36.038608'),
 
7840
(7, '04:37:47.062416'), (9, '19:34:06.054514'), (NULL,'20:35:33.022996'),
 
7841
(1, NULL), (9, '14:43:37.057393'), (2, '02:23:09.043438'),
 
7842
(9, '01:22:45.041064'), (2, '00:00:00'), (4, '00:13:25.038482'),
 
7843
(0, '03:47:16.042671'), (4, '01:41:48.007423'), (8, '00:00:00'),
 
7844
(NULL, '22:32:04.047407'), (NULL, '16:44:14.028443'), (0, '17:38:37.059754'),
 
7845
(NULL, '08:46:48.042388'), (8, '14:11:27.044095');
 
7846
CREATE TABLE t0
 
7847
SELECT DISTINCT grandparent1.col_time_key AS g1
 
7848
FROM t2 AS grandparent1
 
7849
WHERE grandparent1.col_int_key IN
 
7850
(SELECT parent1.col_int_key AS p1
 
7851
FROM t1 AS parent1)
 
7852
AND grandparent1.pk > 9;
 
7853
UPDATE t0
 
7854
SET g1 = g1
 
7855
WHERE g1 IN
 
7856
(SELECT grandparent1.col_time_key AS g1
 
7857
FROM t2 AS grandparent1
 
7858
WHERE grandparent1.col_int_key IN
 
7859
(SELECT parent1.col_int_key AS p1
 
7860
FROM t1 AS parent1)
 
7861
AND grandparent1.pk > 9);
 
7862
DROP TABLE t0, t1, t2;
 
7863
# End of test for bug#12867557
 
7864
#
 
7865
# Bug#12711441: crash in fix_after_pullout
 
7866
#
 
7867
CREATE TABLE t1 (
 
7868
pk int NOT NULL,
 
7869
col_int_nokey int DEFAULT NULL,
 
7870
col_int_key int DEFAULT NULL,
 
7871
col_time_key time DEFAULT NULL,
 
7872
col_varchar_key varchar(1) DEFAULT NULL,
 
7873
PRIMARY KEY (pk)
 
7874
);
 
7875
CREATE VIEW v1 AS SELECT * FROM t1;
 
7876
CREATE TABLE t2 (
 
7877
col_int_key int DEFAULT NULL,
 
7878
col_varchar_key varchar(1) DEFAULT NULL,
 
7879
col_varchar_nokey varchar(1) DEFAULT NULL,
 
7880
KEY col_varchar_key(col_varchar_key, col_int_key)
 
7881
);
 
7882
CREATE TABLE t3 (
 
7883
pk int NOT NULL,
 
7884
col_int_key INT DEFAULT NULL,
 
7885
PRIMARY KEY (pk)
 
7886
);
 
7887
CREATE TABLE t4 (
 
7888
col_int_nokey INT DEFAULT NULL,
 
7889
col_varchar_key varchar(1) DEFAULT NULL,
 
7890
col_varchar_nokey varchar(1) DEFAULT NULL,
 
7891
KEY col_varchar_key(col_varchar_key)
 
7892
);
 
7893
CREATE TABLE ts
 
7894
SELECT alias1.col_time_key AS field1
 
7895
FROM v1 AS alias1
 
7896
RIGHT JOIN t3 AS alias2
 
7897
ON alias2.col_int_key = alias1.col_int_nokey
 
7898
WHERE alias1.pk >= SOME(
 
7899
SELECT SQ1_alias1.pk AS SQ1_field1
 
7900
FROM t3 AS SQ1_alias1
 
7901
INNER JOIN (t2 AS SQ1_alias2
 
7902
INNER JOIN t4 AS SQ1_alias3
 
7903
ON SQ1_alias3.col_varchar_key = SQ1_alias2.col_varchar_nokey)
 
7904
ON SQ1_alias3.col_int_nokey = SQ1_alias2.col_int_key
 
7905
WHERE SQ1_alias2.col_varchar_key <= alias1.col_varchar_key
 
7906
AND SQ1_alias3.col_varchar_nokey <> alias1.col_varchar_key)
 
7907
;
 
7908
SELECT * FROM ts WHERE field1 IN (
 
7909
SELECT alias1.col_time_key AS field1
 
7910
FROM v1 AS alias1
 
7911
RIGHT JOIN t3 AS alias2
 
7912
ON alias2.col_int_key = alias1.col_int_nokey
 
7913
WHERE alias1.pk >= SOME(
 
7914
SELECT SQ1_alias1.pk AS SQ1_field1
 
7915
FROM t3 AS SQ1_alias1
 
7916
INNER JOIN (t2 AS SQ1_alias2
 
7917
INNER JOIN t4 AS SQ1_alias3
 
7918
ON SQ1_alias3.col_varchar_key = SQ1_alias2.col_varchar_nokey)
 
7919
ON SQ1_alias3.col_int_nokey = SQ1_alias2.col_int_key
 
7920
WHERE SQ1_alias2.col_varchar_key <= alias1.col_varchar_key
 
7921
AND SQ1_alias3.col_varchar_nokey <> alias1.col_varchar_key)
 
7922
);
 
7923
field1
 
7924
DROP TABLE t1, t2, t3, t4, ts;
 
7925
DROP VIEW v1;
 
7926
# End of test for bug#12711441.
 
7927
#
 
7928
# Bug#12664936: Same query executed as where subquery ...
 
7929
#
 
7930
CREATE TABLE t1 (
 
7931
col_varchar_key VARCHAR(1),
 
7932
KEY col_varchar_key (col_varchar_key)
 
7933
);
 
7934
INSERT INTO t1 VALUES
 
7935
('o'), ('w'), ('m'), ('q'),
 
7936
('f'), ('p'), ('j'), ('c');
 
7937
CREATE TABLE t2 (
 
7938
col_int_nokey INTEGER,
 
7939
col_int_key INTEGER,
 
7940
col_varchar_key varchar(1),
 
7941
KEY col_int_key (col_int_key)
 
7942
);
 
7943
INSERT INTO t2 VALUES
 
7944
(8,5,'u'),(4,5,'p'),(8,1,'o'),(NULL,7,'v'),
 
7945
(1,2,'g'),(2,1,'q'),(NULL,7,'l'),(3,1,'n');
 
7946
CREATE TABLE t4
 
7947
SELECT t2.col_int_nokey, t2.col_varchar_key
 
7948
FROM t1 JOIN t2 ON t2.col_varchar_key = t1.col_varchar_key
 
7949
WHERE t2.col_int_key = 1;
 
7950
EXPLAIN SELECT *
 
7951
FROM t4
 
7952
WHERE (col_int_nokey, col_varchar_key) IN
 
7953
(SELECT t2.col_int_nokey, t2.col_varchar_key
 
7954
FROM t1 JOIN t2 ON t2.col_varchar_key = t1.col_varchar_key
 
7955
WHERE t2.col_int_key = 1
 
7956
);
 
7957
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
7958
1       SIMPLE  t4      ALL     NULL    NULL    NULL    NULL    2       Using where
 
7959
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      9       test.t4.col_int_nokey,test.t4.col_varchar_key   1       NULL
 
7960
2       MATERIALIZED    t2      ref     col_int_key     col_int_key     5       const   3       Using where
 
7961
2       MATERIALIZED    t1      ref     col_varchar_key col_varchar_key 4       test.t2.col_varchar_key 2       Using index
 
7962
SELECT *
 
7963
FROM t4
 
7964
WHERE (col_int_nokey, col_varchar_key) IN
 
7965
(SELECT t2.col_int_nokey, t2.col_varchar_key
 
7966
FROM t1 JOIN t2 ON t2.col_varchar_key = t1.col_varchar_key
 
7967
WHERE t2.col_int_key = 1
 
7968
);
 
7969
col_int_nokey   col_varchar_key
 
7970
8       o
 
7971
2       q
 
7972
DROP TABLE t1, t2, t4;
 
7973
# End of test for bug#12664936.
 
7974
#
 
7975
# Bug#13340270: assertion table->sort.record_pointers == __null
 
7976
#
 
7977
CREATE TABLE t1 (
 
7978
pk int NOT NULL,
 
7979
col_int_key int DEFAULT NULL,
 
7980
col_varchar_key varchar(1) DEFAULT NULL,
 
7981
col_varchar_nokey varchar(1) DEFAULT NULL,
 
7982
PRIMARY KEY (pk),
 
7983
KEY col_int_key (col_int_key),
 
7984
KEY col_varchar_key (col_varchar_key, col_int_key)
 
7985
) ENGINE=InnoDB;
 
7986
INSERT INTO t1 VALUES
 
7987
(10,8,'x','x'),
 
7988
(11,7,'d','d'),
 
7989
(12,1,'r','r'),
 
7990
(13,7,'f','f'),
 
7991
(14,9,'y','y'),
 
7992
(15,NULL,'u','u'),
 
7993
(16,1,'m','m'),
 
7994
(17,9,NULL,NULL),
 
7995
(18,2,'o','o'),
 
7996
(19,9,'w','w'),
 
7997
(20,2,'m','m'),
 
7998
(21,4,'q','q');
 
7999
CREATE TABLE t2
 
8000
SELECT alias1.col_varchar_nokey AS field1
 
8001
FROM t1 AS alias1 JOIN t1 AS alias2
 
8002
ON alias2.col_int_key = alias1.pk OR
 
8003
alias2.col_int_key = alias1.col_int_key
 
8004
WHERE alias1.pk = 58 OR alias1.col_varchar_key = 'o'
 
8005
 
 
8006
;
 
8007
EXPLAIN SELECT *
 
8008
FROM t2
 
8009
WHERE (field1) IN (SELECT alias1.col_varchar_nokey AS field1
 
8010
FROM t1 AS alias1 JOIN t1 AS alias2
 
8011
ON alias2.col_int_key = alias1.pk OR
 
8012
alias2.col_int_key = alias1.col_int_key
 
8013
WHERE alias1.pk = 58 OR alias1.col_varchar_key = 'o'
 
8014
);
 
8015
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8016
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
8017
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      4       test.t2.field1  1       NULL
 
8018
2       MATERIALIZED    alias1  index_merge     PRIMARY,col_int_key,col_varchar_key     col_varchar_key,PRIMARY 4,4     NULL    2       Using sort_union(col_varchar_key,PRIMARY); Using where
 
8019
2       MATERIALIZED    alias2  ALL     col_int_key     NULL    NULL    NULL    12      Range checked for each record (index map: 0x2)
 
8020
SELECT *
 
8021
FROM t2
 
8022
WHERE (field1) IN (SELECT alias1.col_varchar_nokey AS field1
 
8023
FROM t1 AS alias1 JOIN t1 AS alias2
 
8024
ON alias2.col_int_key = alias1.pk OR
 
8025
alias2.col_int_key = alias1.col_int_key
 
8026
WHERE alias1.pk = 58 OR alias1.col_varchar_key = 'o'
 
8027
);
 
8028
field1
 
8029
o
 
8030
o
 
8031
DROP TABLE t1, t2;
 
8032
# End of test for bug#13340270.
 
8033
#
 
8034
# Bug#13335319: Seg fault when analyzing FirstMatch semi-join strategy
 
8035
#
 
8036
CREATE TABLE ot1(a INTEGER);
 
8037
INSERT INTO ot1 VALUES(1), (2), (3);
 
8038
CREATE TABLE ot2(a INTEGER);
 
8039
INSERT INTO ot2 VALUES(1), (2), (4), (6), (8), (10);
 
8040
CREATE TABLE it1(a INTEGER);
 
8041
INSERT INTO it1 VALUES(1), (3), (5), (7);
 
8042
CREATE TABLE it2(a INTEGER);
 
8043
INSERT INTO it2 VALUES(1), (3), (5), (7), (9);
 
8044
explain SELECT ot1.a, ot2.a
 
8045
FROM ot1, ot2
 
8046
WHERE ot1.a IN (SELECT a FROM it1) AND
 
8047
ot2.a IN (SELECT a FROM it2);
 
8048
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8049
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    3       Using where
 
8050
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      5       test.ot1.a      1       NULL
 
8051
1       SIMPLE  <subquery3>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
8052
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    6       Using where
 
8053
2       MATERIALIZED    it1     ALL     NULL    NULL    NULL    NULL    4       NULL
 
8054
3       MATERIALIZED    it2     ALL     NULL    NULL    NULL    NULL    5       NULL
 
8055
SELECT ot1.a, ot2.a
 
8056
FROM ot1, ot2
 
8057
WHERE ot1.a IN (SELECT a FROM it1) AND
 
8058
ot2.a IN (SELECT a FROM it2);
 
8059
a       a
 
8060
1       1
 
8061
3       1
 
8062
DROP TABLE ot1, ot2, it1, it2;
 
8063
# End of test for bug#13335319.
 
8064
#
 
8065
# Bug#13334882: Assertion keypart_map failed in MyIsam function
 
8066
#
 
8067
CREATE TABLE t1 (
 
8068
pk int NOT NULL,
 
8069
col_int_nokey INT NOT NULL,
 
8070
col_int_key INT NOT NULL,
 
8071
PRIMARY KEY (pk),
 
8072
KEY col_int_key (col_int_key)
 
8073
) ENGINE=MyISAM;
 
8074
INSERT INTO t1 VALUES
 
8075
(1,4,0),
 
8076
(2,6,8),
 
8077
(3,3,1),
 
8078
(7,2,6),
 
8079
(8,9,1),
 
8080
(9,3,6),
 
8081
(10,8,2),
 
8082
(11,1,4),
 
8083
(12,8,8),
 
8084
(13,8,4),
 
8085
(14,5,4);
 
8086
CREATE TABLE t2 (
 
8087
pk int NOT NULL,
 
8088
col_int_nokey int NOT NULL,
 
8089
col_int_key int NOT NULL,
 
8090
PRIMARY KEY (pk),
 
8091
KEY col_int_key (col_int_key)
 
8092
) ENGINE=MyISAM;
 
8093
INSERT INTO t2 VALUES
 
8094
(10,8,7);
 
8095
CREATE TABLE t3
 
8096
SELECT grandparent1.col_int_nokey AS g1
 
8097
FROM t1 AS grandparent1
 
8098
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
 
8099
(SELECT parent1.col_int_key AS p1,
 
8100
parent1.col_int_key AS p2
 
8101
FROM t1 AS parent1
 
8102
LEFT JOIN t2 AS parent2
 
8103
ON parent1.col_int_nokey = parent2.col_int_key
 
8104
)
 
8105
AND grandparent1.col_int_key <> 3
 
8106
;
 
8107
explain SELECT * FROM t3
 
8108
WHERE g1 NOT IN
 
8109
(SELECT grandparent1.col_int_nokey AS g1
 
8110
FROM t1 AS grandparent1
 
8111
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
 
8112
(SELECT parent1.col_int_key AS p1,
 
8113
parent1.col_int_key AS p2
 
8114
FROM t1 AS parent1
 
8115
LEFT JOIN t2 AS parent2
 
8116
ON parent1.col_int_nokey = parent2.col_int_key
 
8117
)
 
8118
AND grandparent1.col_int_key <> 3
 
8119
);
 
8120
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8121
1       PRIMARY NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
8122
2       DEPENDENT SUBQUERY      grandparent1    ref     col_int_key     col_int_key     4       func    2       Using index condition; Using where
 
8123
2       DEPENDENT SUBQUERY      <subquery3>     eq_ref  <auto_key>      <auto_key>      8       test.grandparent1.col_int_nokey,test.grandparent1.col_int_nokey 1       NULL
 
8124
3       MATERIALIZED    parent1 ref     col_int_key     col_int_key     4       func    2       NULL
 
8125
3       MATERIALIZED    parent2 ref     col_int_key     col_int_key     4       test.parent1.col_int_nokey      2       Using index
 
8126
explain format=json SELECT * FROM t3
 
8127
WHERE g1 NOT IN
 
8128
(SELECT grandparent1.col_int_nokey AS g1
 
8129
FROM t1 AS grandparent1
 
8130
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
 
8131
(SELECT parent1.col_int_key AS p1,
 
8132
parent1.col_int_key AS p2
 
8133
FROM t1 AS parent1
 
8134
LEFT JOIN t2 AS parent2
 
8135
ON parent1.col_int_nokey = parent2.col_int_key
 
8136
)
 
8137
AND grandparent1.col_int_key <> 3
 
8138
);
 
8139
EXPLAIN
 
8140
{
 
8141
  "query_block": {
 
8142
    "select_id": 1,
 
8143
    "table": {
 
8144
      "message": "Impossible WHERE noticed after reading const tables",
 
8145
      "attached_subqueries": [
 
8146
        {
 
8147
          "dependent": true,
 
8148
          "cacheable": false,
 
8149
          "query_block": {
 
8150
            "select_id": 3,
 
8151
            "nested_loop": [
 
8152
              {
 
8153
                "table": {
 
8154
                  "table_name": "grandparent1",
 
8155
                  "access_type": "ref",
 
8156
                  "possible_keys": [
 
8157
                    "col_int_key"
 
8158
                  ],
 
8159
                  "key": "col_int_key",
 
8160
                  "used_key_parts": [
 
8161
                    "col_int_key"
 
8162
                  ],
 
8163
                  "key_length": "4",
 
8164
                  "ref": [
 
8165
                    "func"
 
8166
                  ],
 
8167
                  "rows": 2,
 
8168
                  "filtered": 100,
 
8169
                  "index_condition": "(`test`.`grandparent1`.`col_int_key` <> 3)",
 
8170
                  "attached_condition": "(((`test`.`grandparent1`.`col_int_key` = `test`.`grandparent1`.`col_int_nokey`) and (<cache>('8') = `test`.`grandparent1`.`col_int_nokey`)) and ((`test`.`grandparent1`.`col_int_nokey` is not null) and (`test`.`grandparent1`.`col_int_nokey` is not null)))"
 
8171
                }
 
8172
              },
 
8173
              {
 
8174
                "table": {
 
8175
                  "table_name": "<subquery3>",
 
8176
                  "access_type": "eq_ref",
 
8177
                  "key": "<auto_key>",
 
8178
                  "key_length": "8",
 
8179
                  "ref": [
 
8180
                    "test.grandparent1.col_int_nokey",
 
8181
                    "test.grandparent1.col_int_nokey"
 
8182
                  ],
 
8183
                  "rows": 1,
 
8184
                  "materialized_from_subquery": {
 
8185
                    "using_temporary_table": true,
 
8186
                    "query_block": {
 
8187
                      "nested_loop": [
 
8188
                        {
 
8189
                          "table": {
 
8190
                            "table_name": "parent1",
 
8191
                            "access_type": "ref",
 
8192
                            "possible_keys": [
 
8193
                              "col_int_key"
 
8194
                            ],
 
8195
                            "key": "col_int_key",
 
8196
                            "used_key_parts": [
 
8197
                              "col_int_key"
 
8198
                            ],
 
8199
                            "key_length": "4",
 
8200
                            "ref": [
 
8201
                              "func"
 
8202
                            ],
 
8203
                            "rows": 2,
 
8204
                            "filtered": 100
 
8205
                          }
 
8206
                        },
 
8207
                        {
 
8208
                          "table": {
 
8209
                            "table_name": "parent2",
 
8210
                            "access_type": "ref",
 
8211
                            "possible_keys": [
 
8212
                              "col_int_key"
 
8213
                            ],
 
8214
                            "key": "col_int_key",
 
8215
                            "used_key_parts": [
 
8216
                              "col_int_key"
 
8217
                            ],
 
8218
                            "key_length": "4",
 
8219
                            "ref": [
 
8220
                              "test.parent1.col_int_nokey"
 
8221
                            ],
 
8222
                            "rows": 2,
 
8223
                            "filtered": 100,
 
8224
                            "using_index": true
 
8225
                          }
 
8226
                        }
 
8227
                      ]
 
8228
                    }
 
8229
                  }
 
8230
                }
 
8231
              }
 
8232
            ]
 
8233
          }
 
8234
        }
 
8235
      ]
 
8236
    }
 
8237
  }
 
8238
}
 
8239
Warnings:
 
8240
Note    1003    /* select#1 */ select '8' AS `g1` from dual where (not(<in_optimizer>('8',<exists>(/* select#2 */ select 1 from `test`.`t1` `grandparent1` semi join (`test`.`t1` `parent1` left join `test`.`t2` `parent2` on((`test`.`parent1`.`col_int_nokey` = `test`.`parent2`.`col_int_key`))) where ((`test`.`grandparent1`.`col_int_key` = `test`.`grandparent1`.`col_int_nokey`) and (`<subquery3>`.`p1` = `test`.`grandparent1`.`col_int_nokey`) and (`<subquery3>`.`p2` = `test`.`grandparent1`.`col_int_nokey`) and (`test`.`grandparent1`.`col_int_key` <> 3) and (<cache>('8') = `test`.`grandparent1`.`col_int_nokey`))))))
 
8241
SELECT * FROM t3
 
8242
WHERE g1 NOT IN
 
8243
(SELECT grandparent1.col_int_nokey AS g1
 
8244
FROM t1 AS grandparent1
 
8245
WHERE (grandparent1.col_int_nokey, grandparent1.col_int_key) IN
 
8246
(SELECT parent1.col_int_key AS p1,
 
8247
parent1.col_int_key AS p2
 
8248
FROM t1 AS parent1
 
8249
LEFT JOIN t2 AS parent2
 
8250
ON parent1.col_int_nokey = parent2.col_int_key
 
8251
)
 
8252
AND grandparent1.col_int_key <> 3
 
8253
);
 
8254
g1
 
8255
DROP TABLE t1, t2, t3;
 
8256
# End of test for bug#13334882.
 
8257
#
 
8258
# Bug#13339643: Assertion on JOIN::flatten_subqueries on second execution
 
8259
#
 
8260
CREATE TABLE t1 (
 
8261
col_int_nokey INT,
 
8262
col_varchar_nokey VARCHAR(1)
 
8263
);
 
8264
INSERT INTO t1 VALUES
 
8265
(1,'o'),
 
8266
(2,'t');
 
8267
CREATE TABLE t2 LIKE t1;
 
8268
INSERT INTO t2 VALUES
 
8269
(1,'o'),
 
8270
(4,'f');
 
8271
CREATE VIEW v_t2 AS SELECT * FROM t2;
 
8272
CREATE TABLE t3 LIKE t1;
 
8273
INSERT INTO t3 VALUES
 
8274
(1,'o'),
 
8275
(4,'f');
 
8276
explain SELECT alias1.col_varchar_nokey
 
8277
FROM t1 AS alias1
 
8278
INNER JOIN v_t2 AS alias2
 
8279
ON alias2.col_int_nokey = alias1.col_int_nokey AND
 
8280
'o' IN (SELECT col_varchar_nokey
 
8281
FROM t3);
 
8282
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8283
1       SIMPLE  t3      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch
 
8284
1       SIMPLE  alias1  ALL     NULL    NULL    NULL    NULL    2       NULL
 
8285
1       SIMPLE  t2      ALL     NULL    NULL    NULL    NULL    2       Using where
 
8286
SELECT alias1.col_varchar_nokey
 
8287
FROM t1 AS alias1
 
8288
INNER JOIN v_t2 AS alias2
 
8289
ON alias2.col_int_nokey = alias1.col_int_nokey AND
 
8290
'o' IN (SELECT col_varchar_nokey
 
8291
FROM t3);
 
8292
col_varchar_nokey
 
8293
o
 
8294
PREPARE stmt FROM "SELECT alias1.col_varchar_nokey
 
8295
FROM t1 AS alias1
 
8296
INNER JOIN v_t2 AS alias2
 
8297
ON alias2.col_int_nokey = alias1.col_int_nokey AND
 
8298
'o' IN (SELECT col_varchar_nokey
 
8299
FROM t3)";
 
8300
EXECUTE stmt;
 
8301
col_varchar_nokey
 
8302
o
 
8303
DROP VIEW v_t2;
 
8304
DROP TABLE t1, t2, t3;
 
8305
# End of test for bug#13339643.
 
8306
#
 
8307
# Bug#13424134: Wrong result on JOIN + nested WHERE ... IN clauses
 
8308
#
 
8309
CREATE TABLE t1 (
 
8310
pk int NOT NULL,
 
8311
col_int_nokey int NOT NULL,
 
8312
col_int_key int NOT NULL,
 
8313
PRIMARY KEY (pk),
 
8314
KEY col_int_key (col_int_key)
 
8315
) ENGINE=MyIsam;
 
8316
INSERT INTO t1 VALUES
 
8317
(10,1,7), (13,7,3), (18,0,1), (23,8,1);
 
8318
CREATE TABLE t2 (
 
8319
pk int NOT NULL,
 
8320
col_int_key int NOT NULL,
 
8321
PRIMARY KEY (pk),
 
8322
KEY col_int_key (col_int_key)
 
8323
) ENGINE=MyIsam;
 
8324
INSERT INTO t2 VALUES (1,7);
 
8325
EXPLAIN SELECT t1a.*
 
8326
FROM t1 AS t1a
 
8327
JOIN t1 AS t1b USING ( col_int_nokey )
 
8328
WHERE t1a.col_int_key IN (
 
8329
SELECT pk
 
8330
FROM t2
 
8331
WHERE col_int_key IN (
 
8332
SELECT col_int_nokey
 
8333
FROM t1
 
8334
)
 
8335
);
 
8336
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8337
1       SIMPLE  t2      system  PRIMARY,col_int_key     NULL    NULL    NULL    1       NULL
 
8338
1       SIMPLE  t1a     ref     col_int_key     col_int_key     4       const   1       NULL
 
8339
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    4       Using where; FirstMatch(t1a)
 
8340
1       SIMPLE  t1b     ALL     NULL    NULL    NULL    NULL    4       Using where
 
8341
SELECT t1a.*
 
8342
FROM t1 AS t1a
 
8343
JOIN t1 AS t1b USING ( col_int_nokey )
 
8344
WHERE t1a.col_int_key IN (
 
8345
SELECT pk
 
8346
FROM t2
 
8347
WHERE col_int_key IN (
 
8348
SELECT col_int_nokey
 
8349
FROM t1
 
8350
)
 
8351
);
 
8352
pk      col_int_nokey   col_int_key
 
8353
18      0       1
 
8354
23      8       1
 
8355
ALTER TABLE t1 ENGINE=Innodb;
 
8356
ALTER TABLE t2 ENGINE=Innodb;
 
8357
SELECT t1a.*
 
8358
FROM t1 AS t1a
 
8359
JOIN t1 AS t1b USING ( col_int_nokey )
 
8360
WHERE t1a.col_int_key IN (
 
8361
SELECT pk
 
8362
FROM t2
 
8363
WHERE col_int_key IN (
 
8364
SELECT col_int_nokey
 
8365
FROM t1
 
8366
)
 
8367
);
 
8368
pk      col_int_nokey   col_int_key
 
8369
18      0       1
 
8370
23      8       1
 
8371
DROP TABLE t1, t2;
 
8372
# End of test for bug#13424134.
 
8373
#
 
8374
# Bug#13414014: Extra rows in result on semijoin query with where ...
 
8375
#
 
8376
CREATE TABLE t1 (
 
8377
c INT,
 
8378
d INT,
 
8379
a VARCHAR(1),
 
8380
b VARCHAR(1),
 
8381
KEY a (a)
 
8382
);
 
8383
INSERT INTO t1 VALUES
 
8384
(NULL,8,'x','x'), (7,4,'q','q'), (6,8,'c','c');
 
8385
CREATE TABLE t2 (
 
8386
a VARCHAR(1),
 
8387
KEY a (a)
 
8388
);
 
8389
INSERT INTO t2 VALUES
 
8390
('c'), (NULL), ('x'), ('q');
 
8391
explain SELECT *
 
8392
FROM t2 AS ot
 
8393
WHERE (a, a) IN
 
8394
(SELECT a, b
 
8395
FROM t1 AS it
 
8396
WHERE it.a = 'x' OR it.c > it.d
 
8397
)
 
8398
;
 
8399
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8400
1       SIMPLE  ot      index   a       a       4       NULL    4       Using where; Using index
 
8401
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      8       test.ot.a,test.ot.a     1       NULL
 
8402
2       MATERIALIZED    it      ALL     a       NULL    NULL    NULL    3       Using where
 
8403
SELECT *
 
8404
FROM t2 AS ot
 
8405
WHERE (a, a) IN
 
8406
(SELECT a, b
 
8407
FROM t1 AS it
 
8408
WHERE it.a = 'x' OR it.c > it.d
 
8409
)
 
8410
;
 
8411
a
 
8412
q
 
8413
x
 
8414
DROP TABLE t1, t2;
 
8415
# End of test for bug#13414014.
 
8416
#
 
8417
# Bug#13545215: Missing rows on nested in-subquery with materialization
 
8418
#
 
8419
CREATE TABLE t1 (
 
8420
col_int_key int,
 
8421
col_varchar_key varchar(1),
 
8422
col_varchar_nokey varchar(1),
 
8423
KEY col_int_key (col_int_key),
 
8424
KEY col_varchar_key (col_varchar_key,col_int_key)
 
8425
) ;
 
8426
INSERT INTO t1 VALUES
 
8427
(8,'x','x'), (0,'p','p'), (8,'c','c');
 
8428
CREATE TABLE t2 (
 
8429
pk int NOT NULL,
 
8430
col_varchar_key varchar(1),
 
8431
col_varchar_nokey varchar(1),
 
8432
PRIMARY KEY (pk),
 
8433
KEY col_varchar_key (col_varchar_key)
 
8434
);
 
8435
INSERT INTO t2 VALUES
 
8436
(1,'v','v'), (2,'v','v'), (3,'c','c'), (4,NULL,NULL),
 
8437
(5,'x','x'), (6,'i','i'), (7,'e','e'), (8,'p','p');
 
8438
CREATE TABLE t3 (
 
8439
col_int_nokey int
 
8440
);
 
8441
INSERT INTO t3 VALUES (7);
 
8442
explain SELECT grandparent1.col_varchar_nokey
 
8443
FROM t1 AS grandparent1 JOIN t1 AS grandparent2 USING (col_int_key)
 
8444
WHERE grandparent1.col_varchar_key IN (
 
8445
SELECT col_varchar_nokey
 
8446
FROM t2 AS parent1
 
8447
WHERE col_varchar_key IN (
 
8448
SELECT child1.col_varchar_nokey
 
8449
FROM t2 AS child1 LEFT JOIN t3 AS child2
 
8450
ON child1.pk < child2.col_int_nokey
 
8451
)
 
8452
);
 
8453
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8454
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
8455
1       SIMPLE  grandparent1    ref     col_int_key,col_varchar_key     col_varchar_key 4       <subquery2>.col_varchar_nokey   1       Using index condition; Using join buffer (Batched Key Access)
 
8456
1       SIMPLE  grandparent2    ref     col_int_key     col_int_key     5       test.grandparent1.col_int_key   2       Using index
 
8457
2       MATERIALIZED    child1  ALL     NULL    NULL    NULL    NULL    8       Using where
 
8458
2       MATERIALIZED    child2  ALL     NULL    NULL    NULL    NULL    1       Using where
 
8459
2       MATERIALIZED    parent1 ref     col_varchar_key col_varchar_key 4       test.child1.col_varchar_nokey   2       Using join buffer (Batched Key Access)
 
8460
SELECT grandparent1.col_varchar_nokey
 
8461
FROM t1 AS grandparent1 JOIN t1 AS grandparent2 USING (col_int_key)
 
8462
WHERE grandparent1.col_varchar_key IN (
 
8463
SELECT col_varchar_nokey
 
8464
FROM t2 AS parent1
 
8465
WHERE col_varchar_key IN (
 
8466
SELECT child1.col_varchar_nokey
 
8467
FROM t2 AS child1 LEFT JOIN t3 AS child2
 
8468
ON child1.pk < child2.col_int_nokey
 
8469
)
 
8470
);
 
8471
col_varchar_nokey
 
8472
c
 
8473
c
 
8474
p
 
8475
x
 
8476
x
 
8477
DROP TABLE t1, t2, t3;
 
8478
# End of test for bug#13545215.
 
8479
#
 
8480
# BUG#13553211 - MISSING ROWS ON SELECT WITH IN-SUBQUERY AND
 
8481
# MATERIALIZATION + SEMIJOIN ON
 
8482
#
 
8483
CREATE TABLE t1 (
 
8484
col_int_key int(11) DEFAULT NULL,
 
8485
col_varchar_key varchar(1) DEFAULT NULL,
 
8486
col_varchar_nokey varchar(1) DEFAULT NULL,
 
8487
KEY col_int_key (col_int_key),
 
8488
KEY col_varchar_key (col_varchar_key,col_int_key)
 
8489
);
 
8490
INSERT INTO t1 VALUES (4,'v','v');
 
8491
INSERT INTO t1 VALUES (62,'v','v');
 
8492
INSERT INTO t1 VALUES (7,'c','c');
 
8493
INSERT INTO t1 VALUES (1,NULL,NULL);
 
8494
EXPLAIN SELECT
 
8495
alias1.col_varchar_nokey AS a1_nokey,
 
8496
alias1.col_varchar_key AS a1_key,
 
8497
alias2.col_varchar_nokey AS a2_nokey
 
8498
FROM
 
8499
t1 AS alias1, t1 AS alias2
 
8500
WHERE
 
8501
(alias1.col_varchar_nokey,alias2.col_varchar_nokey)
 
8502
IN
 
8503
(
 
8504
SELECT
 
8505
SQ2_alias2.col_varchar_nokey, SQ2_alias1.col_varchar_key
 
8506
FROM
 
8507
t1 AS SQ2_alias1, t1 AS SQ2_alias2
 
8508
)
 
8509
;
 
8510
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8511
1       SIMPLE  alias1  ALL     NULL    NULL    NULL    NULL    4       Using where
 
8512
1       SIMPLE  alias2  ALL     NULL    NULL    NULL    NULL    4       Using where
 
8513
1       SIMPLE  <subquery2>     eq_ref  <auto_key>      <auto_key>      8       test.alias1.col_varchar_nokey,test.alias2.col_varchar_nokey     1       NULL
 
8514
2       MATERIALIZED    SQ2_alias1      index   col_varchar_key col_varchar_key 9       NULL    4       Using index
 
8515
2       MATERIALIZED    SQ2_alias2      ALL     NULL    NULL    NULL    NULL    4       NULL
 
8516
SELECT
 
8517
alias1.col_varchar_nokey AS a1_nokey,
 
8518
alias1.col_varchar_key AS a1_key,
 
8519
alias2.col_varchar_nokey AS a2_nokey
 
8520
FROM
 
8521
t1 AS alias1, t1 AS alias2
 
8522
WHERE
 
8523
(alias1.col_varchar_nokey,alias2.col_varchar_nokey)
 
8524
IN
 
8525
(
 
8526
SELECT
 
8527
SQ2_alias2.col_varchar_nokey, SQ2_alias1.col_varchar_key
 
8528
FROM
 
8529
t1 AS SQ2_alias1, t1 AS SQ2_alias2
 
8530
)
 
8531
;
 
8532
a1_nokey        a1_key  a2_nokey
 
8533
c       c       c
 
8534
c       c       v
 
8535
c       c       v
 
8536
v       v       c
 
8537
v       v       c
 
8538
v       v       v
 
8539
v       v       v
 
8540
v       v       v
 
8541
v       v       v
 
8542
DROP TABLE t1;
 
8543
#
 
8544
# Bug#13541406: Wrong result with loosescan on select .. where .. in
 
8545
#
 
8546
CREATE TABLE t1 (
 
8547
col_int_key INT NOT NULL,
 
8548
col_varchar_nokey VARCHAR(1) NOT NULL,
 
8549
KEY col_int_key (col_int_key)
 
8550
) ENGINE=InnoDB;
 
8551
INSERT INTO t1 VALUES
 
8552
(7,'v'), (0,'s'), (9,'l'), (3,'y'), (4,'c'), (2,'i'), (5,'h'), (3,'q'),
 
8553
(1,'a'), (3,'v'), (6,'u'), (7,'s'), (5,'y'), (1,'z'), (204,'h'), (224,'p'),
 
8554
(9,'e'), (5,'i'), (0,'y'), (3,'w');
 
8555
CREATE TABLE t2 (
 
8556
pk INT NOT NULL,
 
8557
col_int_key INT NOT NULL,
 
8558
col_varchar_key VARCHAR(1) NOT NULL,
 
8559
col_varchar_nokey VARCHAR(1) NOT NULL,
 
8560
PRIMARY KEY (pk),
 
8561
KEY col_int_key (col_int_key),
 
8562
KEY col_varchar_key (col_varchar_key,col_int_key)
 
8563
) ENGINE=InnoDB;
 
8564
INSERT INTO t2 VALUES
 
8565
(1,0,'j','j'), (2,8,'v','v'), (3,1,'c','c'), (4,8,'m','m'),
 
8566
(5,9,'d','d'), (6,24,'d','d'), (7,6,'y','y'), (8,1,'t','t'),
 
8567
(9,6,'d','d'), (10,2,'s','s'), (11,4,'r','r'), (12,8,'m','m'),
 
8568
(13,4,'b','b'), (14,4,'x','x'), (15,7,'g','g'), (16,4,'p','p'),
 
8569
(17,1,'q','q'), (18,9,'w','w'), (19,4,'d','d'), (20,8,'e','e');
 
8570
# This query should never use a LooseScan strategy
 
8571
explain SELECT ot1.col_int_key AS field1
 
8572
FROM t2 AS ot1, t2 AS ot2
 
8573
WHERE (ot1.col_varchar_key, ot2.col_varchar_nokey) IN (
 
8574
SELECT it2.col_varchar_nokey, it1.col_varchar_key
 
8575
FROM t2 AS it1 JOIN t1 AS it2 ON it2.col_int_key = it1.pk);
 
8576
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8577
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    20      Start temporary
 
8578
1       SIMPLE  it1     ref     PRIMARY,col_varchar_key col_varchar_key 3       test.ot2.col_varchar_nokey      1       Using index
 
8579
1       SIMPLE  it2     ref     col_int_key     col_int_key     4       test.it1.pk     1       Using join buffer (Batched Key Access)
 
8580
1       SIMPLE  ot1     ref     col_varchar_key col_varchar_key 3       test.it2.col_varchar_nokey      1       Using index; End temporary
 
8581
SELECT ot1.col_int_key AS field1
 
8582
FROM t2 AS ot1, t2 AS ot2
 
8583
WHERE (ot1.col_varchar_key, ot2.col_varchar_nokey) IN (
 
8584
SELECT it2.col_varchar_nokey, it1.col_varchar_key
 
8585
FROM t2 AS it1 JOIN t1 AS it2 ON it2.col_int_key = it1.pk);
 
8586
field1
 
8587
1
 
8588
1
 
8589
1
 
8590
2
 
8591
6
 
8592
6
 
8593
6
 
8594
6
 
8595
6
 
8596
8
 
8597
8
 
8598
8
 
8599
8
 
8600
8
 
8601
8
 
8602
9
 
8603
DROP TABLE t1, t2;
 
8604
# End of test for bug#13541406.
 
8605
#
 
8606
# Bug#13576391: Missing rows on select with in-subquery and
 
8607
# batched-key-access=on and semijoin
 
8608
#
 
8609
CREATE TABLE t1 (
 
8610
col_int_nokey int NOT NULL,
 
8611
col_varchar_key varchar(1) NOT NULL,
 
8612
KEY col_varchar_key (col_varchar_key)
 
8613
) engine=InnoDB;
 
8614
INSERT INTO t1 VALUES
 
8615
(1,'v'), (7,'s'), (4,'l'), (7,'y'), (0,'c'), (2,'i'), (9,'h'), (4,'q'),
 
8616
(0,'a'), (9,'v'), (1,'u'), (3,'s'), (8,'y'), (8,'z'), (18,'h'), (84,'p'),
 
8617
(6,'e'), (3,'i'), (6,'y'), (6,'w');
 
8618
CREATE TABLE t2 (
 
8619
col_int_nokey int NOT NULL,
 
8620
col_varchar_nokey varchar(1) NOT NULL
 
8621
) engine=InnoDB;
 
8622
INSERT INTO t2 VALUES
 
8623
(4,'j'), (6,'v'), (3,'c'), (5,'m'), (3,'d'), (246,'d'), (2,'y'), (9,'t'),
 
8624
(3,'d'), (8,'s'), (1,'r'), (8,'m'), (8,'b'), (5,'x'), (7,'g'), (5,'p'),
 
8625
(1,'q'), (6,'w'), (2,'d'), (9,'e');
 
8626
explain SELECT col_varchar_nokey
 
8627
FROM t2 AS ot
 
8628
WHERE col_varchar_nokey IN (
 
8629
SELECT col_varchar_key
 
8630
FROM t1 AS it
 
8631
WHERE it.col_int_nokey <= it.col_int_nokey
 
8632
AND NOT ot.col_int_nokey < 2
 
8633
)
 
8634
ORDER BY col_varchar_nokey;
 
8635
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8636
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    20      Using where; Using temporary; Using filesort
 
8637
1       SIMPLE  it      ref     col_varchar_key col_varchar_key 3       test.ot.col_varchar_nokey       1       FirstMatch(ot); Using join buffer (Batched Key Access)
 
8638
SELECT col_varchar_nokey
 
8639
FROM t2 AS ot
 
8640
WHERE col_varchar_nokey IN (
 
8641
SELECT col_varchar_key
 
8642
FROM t1 AS it
 
8643
WHERE it.col_int_nokey <= it.col_int_nokey
 
8644
AND NOT ot.col_int_nokey < 2
 
8645
)
 
8646
ORDER BY col_varchar_nokey;
 
8647
col_varchar_nokey
 
8648
c
 
8649
e
 
8650
p
 
8651
s
 
8652
v
 
8653
w
 
8654
y
 
8655
ALTER TABLE t1 ENGINE=MyISAM;
 
8656
ALTER TABLE t2 ENGINE=MyISAM;
 
8657
explain SELECT col_varchar_nokey
 
8658
FROM t2 AS ot
 
8659
WHERE col_varchar_nokey IN (
 
8660
SELECT col_varchar_key
 
8661
FROM t1 AS it
 
8662
WHERE it.col_int_nokey <= it.col_int_nokey
 
8663
AND NOT ot.col_int_nokey < 2
 
8664
)
 
8665
ORDER BY col_varchar_nokey;
 
8666
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8667
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    20      Using where; Using temporary; Using filesort
 
8668
1       SIMPLE  it      ref     col_varchar_key col_varchar_key 3       test.ot.col_varchar_nokey       2       FirstMatch(ot); Using join buffer (Batched Key Access)
 
8669
SELECT col_varchar_nokey
 
8670
FROM t2 AS ot
 
8671
WHERE col_varchar_nokey IN (
 
8672
SELECT col_varchar_key
 
8673
FROM t1 AS it
 
8674
WHERE it.col_int_nokey <= it.col_int_nokey
 
8675
AND NOT ot.col_int_nokey < 2
 
8676
)
 
8677
ORDER BY col_varchar_nokey;
 
8678
col_varchar_nokey
 
8679
c
 
8680
e
 
8681
p
 
8682
s
 
8683
v
 
8684
w
 
8685
y
 
8686
ALTER TABLE t1 ENGINE=Memory;
 
8687
ALTER TABLE t2 ENGINE=Memory;
 
8688
explain SELECT col_varchar_nokey
 
8689
FROM t2 AS ot
 
8690
WHERE col_varchar_nokey IN (
 
8691
SELECT col_varchar_key
 
8692
FROM t1 AS it
 
8693
WHERE it.col_int_nokey <= it.col_int_nokey
 
8694
AND NOT ot.col_int_nokey < 2
 
8695
)
 
8696
ORDER BY col_varchar_nokey;
 
8697
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8698
1       SIMPLE  ot      ALL     NULL    NULL    NULL    NULL    20      Using where; Using filesort
 
8699
1       SIMPLE  it      ref     col_varchar_key col_varchar_key 3       test.ot.col_varchar_nokey       2       FirstMatch(ot)
 
8700
SELECT col_varchar_nokey
 
8701
FROM t2 AS ot
 
8702
WHERE col_varchar_nokey IN (
 
8703
SELECT col_varchar_key
 
8704
FROM t1 AS it
 
8705
WHERE it.col_int_nokey <= it.col_int_nokey
 
8706
AND NOT ot.col_int_nokey < 2
 
8707
)
 
8708
ORDER BY col_varchar_nokey;
 
8709
col_varchar_nokey
 
8710
c
 
8711
e
 
8712
p
 
8713
s
 
8714
v
 
8715
w
 
8716
y
 
8717
DROP TABLE t1, t2;
 
8718
# End of test for bug#13576391.
 
8719
#
 
8720
# Bug #13589848 "MISSING ROW ON SELECT WITH NESTED IN CLAUSES WHEN LOOSESCAN=ON"
 
8721
#
 
8722
CREATE TABLE t1 (
 
8723
id INT,
 
8724
col_varchar_key VARCHAR(1),
 
8725
col_varchar_nokey VARCHAR(1),
 
8726
KEY (col_varchar_key)
 
8727
);
 
8728
INSERT INTO t1 VALUES (100,'m','m'),
 
8729
(200,'b','b'), (300,'x','x');
 
8730
CREATE TABLE t2 (
 
8731
col_varchar_key VARCHAR(1),
 
8732
col_varchar_nokey VARCHAR(1),
 
8733
KEY (col_varchar_key)
 
8734
);
 
8735
INSERT INTO t2 VALUES ('b','b');
 
8736
CREATE TABLE t3 (
 
8737
col_varchar_key VARCHAR(1),
 
8738
col_varchar_nokey VARCHAR(1),
 
8739
KEY (col_varchar_key)
 
8740
);
 
8741
INSERT INTO t3 VALUES ('k','k');
 
8742
EXPLAIN SELECT GP1.id
 
8743
FROM t1 AS GP1 JOIN t3 AS GP2
 
8744
ON GP2.col_varchar_key <> GP1.col_varchar_nokey
 
8745
WHERE (GP1.col_varchar_nokey, GP1.col_varchar_nokey)
 
8746
IN (
 
8747
SELECT col_varchar_nokey, col_varchar_nokey
 
8748
FROM t1
 
8749
WHERE col_varchar_nokey
 
8750
IN ( SELECT col_varchar_key
 
8751
FROM t2 LEFT JOIN t3 USING (col_varchar_key) )
 
8752
)
 
8753
;
 
8754
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8755
1       SIMPLE  GP2     system  NULL    NULL    NULL    NULL    1       NULL
 
8756
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
8757
1       SIMPLE  GP1     ALL     NULL    NULL    NULL    NULL    3       Using where
 
8758
2       MATERIALIZED    t2      index   col_varchar_key col_varchar_key 4       NULL    1       Using index
 
8759
2       MATERIALIZED    t3      ref     col_varchar_key col_varchar_key 4       test.t2.col_varchar_key 2       Using index
 
8760
2       MATERIALIZED    t1      ALL     NULL    NULL    NULL    NULL    3       Using where
 
8761
SELECT GP1.id
 
8762
FROM t1 AS GP1 JOIN t3 AS GP2
 
8763
ON GP2.col_varchar_key <> GP1.col_varchar_nokey
 
8764
WHERE (GP1.col_varchar_nokey, GP1.col_varchar_nokey)
 
8765
IN (
 
8766
SELECT col_varchar_nokey, col_varchar_nokey
 
8767
FROM t1
 
8768
WHERE col_varchar_nokey
 
8769
IN ( SELECT col_varchar_key
 
8770
FROM t2 LEFT JOIN t3 USING (col_varchar_key) )
 
8771
)
 
8772
;
 
8773
id
 
8774
200
 
8775
DROP TABLE t1,t2,t3;
 
8776
#
 
8777
# Bug #13596176: Missing row on select with nested in clause when
 
8778
#                matr=on and bnl=off + MyISAM
 
8779
#
 
8780
CREATE TABLE t1 (
 
8781
int_key int DEFAULT NULL,
 
8782
vc_key varchar(1) DEFAULT NULL,
 
8783
vc_nokey varchar(1) DEFAULT NULL,
 
8784
KEY int_key (int_key),
 
8785
KEY vc_key (vc_key, int_key)
 
8786
) ENGINE=MyISAM;
 
8787
INSERT INTO t1 VALUES
 
8788
(8,'x','x'), (7,'d','d'), (1,'r','r'), (7,'f','f'),
 
8789
(9,'y','y'), (NULL,'u','u'), (1,'m','m'), (9,NULL,NULL),
 
8790
(2,'o','o'), (9,'w','w'), (2,'m','m'), (4,'q','q'),
 
8791
(0,NULL,NULL), (4,'d','d'), (8,'g','g'), (NULL,'x','x'),
 
8792
(NULL,'f','f'), (0,'p','p'), (NULL,'j','j'), (8,'c','c');
 
8793
CREATE TABLE t2 (
 
8794
int_key int DEFAULT NULL,
 
8795
vc_key varchar(1) DEFAULT NULL,
 
8796
KEY int_key (int_key),
 
8797
KEY vc_key (vc_key, int_key)
 
8798
) ENGINE=MyISAM;
 
8799
INSERT INTO t2 VALUES (8,'g');
 
8800
explain SELECT vc_key
 
8801
FROM t1 as outr
 
8802
WHERE (vc_nokey, vc_key ) IN
 
8803
(SELECT vc_nokey, vc_nokey
 
8804
FROM t1 middle
 
8805
WHERE vc_nokey IN
 
8806
(SELECT child1.vc_key
 
8807
FROM t2 AS child1 JOIN t1 AS child2 USING (int_key)
 
8808
)
 
8809
);
 
8810
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8811
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
8812
1       SIMPLE  outr    ref     vc_key  vc_key  4       <subquery2>.vc_nokey    3       Using where; Using join buffer (Batched Key Access)
 
8813
2       MATERIALIZED    child1  index   int_key,vc_key  vc_key  9       NULL    1       Using where; Using index
 
8814
2       MATERIALIZED    child2  ref     int_key int_key 5       test.child1.int_key     3       Using index
 
8815
2       MATERIALIZED    middle  ALL     NULL    NULL    NULL    NULL    20      Using where
 
8816
SELECT vc_key
 
8817
FROM t1 as outr
 
8818
WHERE (vc_nokey, vc_key ) IN
 
8819
(SELECT vc_nokey, vc_nokey
 
8820
FROM t1 middle
 
8821
WHERE vc_nokey IN
 
8822
(SELECT child1.vc_key
 
8823
FROM t2 AS child1 JOIN t1 AS child2 USING (int_key)
 
8824
)
 
8825
);
 
8826
vc_key
 
8827
g
 
8828
DROP TABLE t1, t2;
 
8829
# End of test for bug#13596176.
 
8830
#
 
8831
# BUG#11754478: MAX/MIN + SUBQUERY + AND FAILS TO RETURN ANY ROWS
 
8832
# BUG#13599013: MAX/MIN + SUBQUERY IN WHERE CLAUSE MATCHING NO 
 
8833
#               ROWS + INDEX DOES NOT RETURN NULL
 
8834
#
 
8835
CREATE TABLE t1 (
 
8836
pk int(11) PRIMARY KEY,
 
8837
int_key int(11),
 
8838
KEY int_key (int_key)
 
8839
);
 
8840
INSERT INTO t1 VALUES (1,0),(2,0),(3,2),(4,0),(5,3),(6,0);
 
8841
SELECT MIN(int_key) FROM t1 WHERE (4, 4) IN (SELECT 1, 2);
 
8842
MIN(int_key)
 
8843
NULL
 
8844
SELECT MIN(int_key) FROM t1 WHERE (4, 4) IN (SELECT 4, 4);
 
8845
MIN(int_key)
 
8846
0
 
8847
SELECT MIN(pk) FROM t1 WHERE pk IN (SELECT int_key FROM t1) AND pk = 6;
 
8848
MIN(pk)
 
8849
NULL
 
8850
DROP TABLE t1;
 
8851
# BUG#13726217: Crash in Item_ident::fix_after_pullout()
 
8852
CREATE TABLE t1(a INTEGER) engine=innodb;
 
8853
INSERT INTO t1 VALUES (0);
 
8854
SELECT 0
 
8855
FROM t1
 
8856
WHERE 0 IN
 
8857
(SELECT 0
 
8858
FROM t1
 
8859
WHERE 0 LIKE
 
8860
(SELECT elt(a, 0) AS b
 
8861
FROM t1
 
8862
GROUP BY a
 
8863
HAVING b
 
8864
)
 
8865
);
 
8866
0
 
8867
DROP TABLE t1;
 
8868
# End of test for bug#13726217.
 
8869
# BUG#13773979: Missing rows on second execution of prepared statement
 
8870
CREATE TABLE t1 (
 
8871
col_int_nokey INT,
 
8872
col_int_key INT,
 
8873
col_varchar_key VARCHAR(1)
 
8874
);
 
8875
INSERT INTO t1 VALUES
 
8876
(1,7,'v'), (7,0,'s'), (4,9,'l'), (7,3,'y'),
 
8877
(2,2,'i'), (9,5,'h'), (0,1,'a'), (9,3,'v');
 
8878
CREATE VIEW v1 AS SELECT * FROM t1;
 
8879
SELECT *
 
8880
FROM t1
 
8881
WHERE col_int_key IN (
 
8882
SELECT alias1.col_int_nokey AS field1
 
8883
FROM v1 AS alias1
 
8884
WHERE alias1.col_varchar_key < 'v'
 
8885
);
 
8886
col_int_nokey   col_int_key     col_varchar_key
 
8887
1       7       v
 
8888
7       0       s
 
8889
4       9       l
 
8890
2       2       i
 
8891
prepare stmt FROM "SELECT *
 
8892
FROM t1
 
8893
WHERE col_int_key IN (
 
8894
SELECT alias1.col_int_nokey AS field1
 
8895
FROM v1 AS alias1
 
8896
WHERE alias1.col_varchar_key < 'v'
 
8897
)";
 
8898
execute stmt;
 
8899
col_int_nokey   col_int_key     col_varchar_key
 
8900
1       7       v
 
8901
7       0       s
 
8902
4       9       l
 
8903
2       2       i
 
8904
execute stmt;
 
8905
col_int_nokey   col_int_key     col_varchar_key
 
8906
1       7       v
 
8907
7       0       s
 
8908
4       9       l
 
8909
2       2       i
 
8910
DEALLOCATE PREPARE stmt;
 
8911
DROP VIEW v1;
 
8912
DROP TABLE t1;
 
8913
# End of test for bug#13773979.
 
8914
#
 
8915
# BUG#13685026 ASSERTION CUR_SJ_INNER_TABLES == 0 IN
 
8916
# --OPTIMIZE_TABLE_ORDER::CHOOSE_TABLE_ORDER
 
8917
#
 
8918
CREATE TABLE t1 (
 
8919
col_int_key INT(11) NOT NULL,
 
8920
col_datetime_key DATETIME NOT NULL,
 
8921
col_varchar_key VARCHAR(1) NOT NULL,
 
8922
col_varchar_nokey VARCHAR(1) NOT NULL,
 
8923
KEY col_int_key (col_int_key),
 
8924
KEY col_datetime_key (col_datetime_key),
 
8925
KEY col_varchar_key (col_varchar_key,col_int_key)
 
8926
);
 
8927
INSERT INTO t1 VALUES (0,'2002-02-13 17:30:06','j','j');
 
8928
INSERT INTO t1 VALUES (8,'2008-09-27 00:34:58','v','v');
 
8929
CREATE TABLE t2 (
 
8930
col_int_key INT(11) NOT NULL,
 
8931
col_datetime_key DATETIME NOT NULL,
 
8932
col_varchar_key VARCHAR(1) NOT NULL,
 
8933
col_varchar_nokey VARCHAR(1) NOT NULL,
 
8934
KEY col_int_key (col_int_key),
 
8935
KEY col_datetime_key (col_datetime_key),
 
8936
KEY col_varchar_key (col_varchar_key,col_int_key)
 
8937
);
 
8938
INSERT INTO t2 VALUES (7,'2003-08-21 00:00:00','b','b');
 
8939
SET @old_depth=@@optimizer_search_depth;
 
8940
SET optimizer_search_depth=4;
 
8941
EXPLAIN SELECT col_datetime_key
 
8942
FROM t1 as outr
 
8943
WHERE col_datetime_key IN (
 
8944
SELECT alias1.col_datetime_key
 
8945
FROM t1 AS alias1
 
8946
LEFT JOIN t1 as alias3
 
8947
STRAIGHT_JOIN ( t2 AS alias4
 
8948
JOIN t1 AS alias5
 
8949
ON alias5.col_varchar_key <= alias4.col_varchar_nokey )
 
8950
ON alias5.col_int_key < alias4.col_int_key
 
8951
ON alias5.col_varchar_key = alias4.col_varchar_key
 
8952
);
 
8953
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
8954
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
8955
1       SIMPLE  outr    ref     col_datetime_key        col_datetime_key        5       <subquery2>.col_datetime_key    2       Using index
 
8956
2       MATERIALIZED    alias1  index   NULL    col_datetime_key        5       NULL    2       Using index
 
8957
2       MATERIALIZED    alias4  ALL     col_int_key,col_varchar_key     NULL    NULL    NULL    1       NULL
 
8958
2       MATERIALIZED    alias5  ref     col_int_key,col_varchar_key     col_varchar_key 3       test.alias4.col_varchar_key     1       Using where; Using index
 
8959
2       MATERIALIZED    alias3  index   NULL    col_int_key     4       NULL    2       Using index
 
8960
SELECT col_datetime_key
 
8961
FROM t1 as outr
 
8962
WHERE col_datetime_key IN (
 
8963
SELECT alias1.col_datetime_key
 
8964
FROM t1 AS alias1
 
8965
LEFT JOIN t1 as alias3
 
8966
STRAIGHT_JOIN ( t2 AS alias4
 
8967
JOIN t1 AS alias5
 
8968
ON alias5.col_varchar_key <= alias4.col_varchar_nokey )
 
8969
ON alias5.col_int_key < alias4.col_int_key
 
8970
ON alias5.col_varchar_key = alias4.col_varchar_key
 
8971
);
 
8972
col_datetime_key
 
8973
2002-02-13 17:30:06
 
8974
2008-09-27 00:34:58
 
8975
DROP TABLE t1,t2;
 
8976
SET @@optimizer_search_depth=@old_depth;
 
8977
#
 
8978
# BUG#13848789: SEGFAULT IN JOIN_READ_NEXT_SAME AT 
 
8979
#               SQL/SQL_EXECUTOR.CC ON HAVING...IN...JOIN
 
8980
#
 
8981
CREATE TABLE t1 (
 
8982
col_int_key INT,
 
8983
col_varchar_key VARCHAR(1),
 
8984
KEY col_int_key (col_int_key),
 
8985
KEY col_varchar_key (col_varchar_key)
 
8986
);
 
8987
INSERT INTO t1 VALUES (8,'x');
 
8988
CREATE TABLE t2 (
 
8989
col_varchar_key VARCHAR(1),
 
8990
KEY col_varchar_key (col_varchar_key)
 
8991
);
 
8992
INSERT INTO t2 VALUES ('x'), ('y');
 
8993
explain SELECT MIN(col_int_key)
 
8994
FROM t1 as t1_outer
 
8995
HAVING (1, 2) IN (
 
8996
SELECT t1_inner.col_int_key, MAX(t1_inner.col_int_key)
 
8997
FROM t1 as t1_inner JOIN t2
 
8998
ON t2.col_varchar_key = t1_inner.col_varchar_key
 
8999
);
 
9000
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9001
1       PRIMARY NULL    NULL    NULL    NULL    NULL    NULL    NULL    Select tables optimized away
 
9002
2       SUBQUERY        t1_inner        system  col_varchar_key NULL    NULL    NULL    1       NULL
 
9003
2       SUBQUERY        t2      ref     col_varchar_key col_varchar_key 4       const   1       Using index
 
9004
SELECT MIN(col_int_key)
 
9005
FROM t1 as t1_outer
 
9006
HAVING (1, 2) IN (
 
9007
SELECT t1_inner.col_int_key, MAX(t1_inner.col_int_key)
 
9008
FROM t1 as t1_inner JOIN t2
 
9009
ON t2.col_varchar_key = t1_inner.col_varchar_key
 
9010
);
 
9011
MIN(col_int_key)
 
9012
DROP TABLE t1,t2;
 
9013
# Bug#13838810: Segfault in evaluate_null_complemented_join_record
 
9014
CREATE TABLE t1 (
 
9015
pk int NOT NULL,
 
9016
col_int_nokey int DEFAULT NULL,
 
9017
col_int_key int DEFAULT NULL,
 
9018
col_varchar_key varchar(1) DEFAULT NULL,
 
9019
PRIMARY KEY (pk),
 
9020
KEY col_int_key (col_int_key),
 
9021
KEY col_varchar_key (col_varchar_key,col_int_key)
 
9022
) ENGINE=InnoDB;
 
9023
INSERT INTO t1 VALUES (10,NULL,8,'x');
 
9024
CREATE TABLE t2 (
 
9025
pk int NOT NULL,
 
9026
col_varchar_nokey varchar(1) DEFAULT NULL,
 
9027
PRIMARY KEY (pk)
 
9028
) ENGINE=InnoDB;
 
9029
INSERT INTO t2 VALUES (1,'x');
 
9030
CREATE TABLE t3 (
 
9031
pk int NOT NULL,
 
9032
col_varchar_key varchar(1) DEFAULT NULL,
 
9033
col_varchar_nokey varchar(1) DEFAULT NULL,
 
9034
PRIMARY KEY (pk),
 
9035
KEY col_varchar_key (col_varchar_key)
 
9036
) ENGINE=InnoDB;
 
9037
INSERT INTO t3 VALUES
 
9038
(1,'v','v'), (2,'v','v'), (3,'c','c'), (4,NULL,NULL);
 
9039
EXPLAIN SELECT table1.pk,table2.pk, table3.pk
 
9040
FROM t2 AS table1
 
9041
LEFT JOIN t1 AS table2
 
9042
LEFT JOIN t1 AS table3
 
9043
ON table3.col_int_key = table2.col_int_key
 
9044
ON table3.pk = table2.col_int_nokey AND
 
9045
table1.col_varchar_nokey IN (
 
9046
SELECT subquery3_t1.col_varchar_nokey
 
9047
FROM t3 AS subquery3_t1
 
9048
LEFT JOIN t1 AS subquery3_t2
 
9049
ON subquery3_t2.col_varchar_key = subquery3_t1.col_varchar_key
 
9050
WHERE subquery3_t2.col_int_nokey <> 9
 
9051
)
 
9052
;
 
9053
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9054
1       SIMPLE  table1  ALL     NULL    NULL    NULL    NULL    1       NULL
 
9055
1       SIMPLE  table2  ALL     col_int_key     NULL    NULL    NULL    1       Using where
 
9056
1       SIMPLE  table3  eq_ref  PRIMARY,col_int_key     PRIMARY 4       test.table2.col_int_nokey       1       Using where
 
9057
1       SIMPLE  subquery3_t2    ALL     col_varchar_key NULL    NULL    NULL    1       Using where
 
9058
1       SIMPLE  subquery3_t1    ref     col_varchar_key col_varchar_key 4       test.subquery3_t2.col_varchar_key       1       Using where; FirstMatch(table3)
 
9059
SELECT table1.pk,table2.pk, table3.pk
 
9060
FROM t2 AS table1
 
9061
LEFT JOIN t1 AS table2
 
9062
LEFT JOIN t1 AS table3
 
9063
ON table3.col_int_key = table2.col_int_key
 
9064
ON table3.pk = table2.col_int_nokey AND
 
9065
table1.col_varchar_nokey IN (
 
9066
SELECT subquery3_t1.col_varchar_nokey
 
9067
FROM t3 AS subquery3_t1
 
9068
LEFT JOIN t1 AS subquery3_t2
 
9069
ON subquery3_t2.col_varchar_key = subquery3_t1.col_varchar_key
 
9070
WHERE subquery3_t2.col_int_nokey <> 9
 
9071
)
 
9072
;
 
9073
pk      pk      pk
 
9074
1       NULL    NULL
 
9075
DROP TABLE t1, t2, t3;
 
9076
Extra test case for specific code coverage
 
9077
CREATE TABLE t1(pk INTEGER);
 
9078
INSERT INTO t1 VALUES(1), (2);
 
9079
explain SELECT *
 
9080
FROM t1 AS ot1 LEFT JOIN t1 AS ot2
 
9081
ON ot1.pk=ot2.pk AND
 
9082
ot2.pk IN
 
9083
(SELECT it1.pk
 
9084
FROM t1 AS it1 LEFT JOIN t1 AS it2 ON it1.pk=it2.pk);
 
9085
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9086
1       SIMPLE  ot1     ALL     NULL    NULL    NULL    NULL    2       NULL
 
9087
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    2       Using where
 
9088
1       SIMPLE  it1     ALL     NULL    NULL    NULL    NULL    2       Using where
 
9089
1       SIMPLE  it2     ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(ot2)
 
9090
SELECT *
 
9091
FROM t1 AS ot1 LEFT JOIN t1 AS ot2
 
9092
ON ot1.pk=ot2.pk AND
 
9093
ot2.pk IN
 
9094
(SELECT it1.pk
 
9095
FROM t1 AS it1 LEFT JOIN t1 AS it2 ON it1.pk=it2.pk);
 
9096
pk      pk
 
9097
1       1
 
9098
2       2
 
9099
DROP TABLE t1;
 
9100
# End of test for bug#13838810.
 
9101
#
 
9102
# BUG#13685026 ASSERTION CUR_SJ_INNER_TABLES == 0 IN
 
9103
# --OPTIMIZE_TABLE_ORDER::CHOOSE_TABLE_ORDER
 
9104
#
 
9105
CREATE TABLE t1 (
 
9106
col_int_key INT(11) NOT NULL,
 
9107
col_datetime_key DATETIME NOT NULL,
 
9108
col_varchar_key VARCHAR(1) NOT NULL,
 
9109
col_varchar_nokey VARCHAR(1) NOT NULL,
 
9110
KEY col_int_key (col_int_key),
 
9111
KEY col_datetime_key (col_datetime_key),
 
9112
KEY col_varchar_key (col_varchar_key,col_int_key)
 
9113
);
 
9114
INSERT INTO t1 VALUES (0,'2002-02-13 17:30:06','j','j');
 
9115
INSERT INTO t1 VALUES (8,'2008-09-27 00:34:58','v','v');
 
9116
CREATE TABLE t2 (
 
9117
col_int_key INT(11) NOT NULL,
 
9118
col_datetime_key DATETIME NOT NULL,
 
9119
col_varchar_key VARCHAR(1) NOT NULL,
 
9120
col_varchar_nokey VARCHAR(1) NOT NULL,
 
9121
KEY col_int_key (col_int_key),
 
9122
KEY col_datetime_key (col_datetime_key),
 
9123
KEY col_varchar_key (col_varchar_key,col_int_key)
 
9124
);
 
9125
INSERT INTO t2 VALUES (7,'2003-08-21 00:00:00','b','b');
 
9126
SET @old_depth=@@optimizer_search_depth;
 
9127
SET optimizer_search_depth=4;
 
9128
EXPLAIN SELECT col_datetime_key
 
9129
FROM t1 as outr
 
9130
WHERE col_datetime_key IN (
 
9131
SELECT alias1.col_datetime_key
 
9132
FROM t1 AS alias1
 
9133
LEFT JOIN t1 as alias3
 
9134
STRAIGHT_JOIN ( t2 AS alias4
 
9135
JOIN t1 AS alias5
 
9136
ON alias5.col_varchar_key <= alias4.col_varchar_nokey )
 
9137
ON alias5.col_int_key < alias4.col_int_key
 
9138
ON alias5.col_varchar_key = alias4.col_varchar_key
 
9139
);
 
9140
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9141
1       SIMPLE  <subquery2>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
9142
1       SIMPLE  outr    ref     col_datetime_key        col_datetime_key        5       <subquery2>.col_datetime_key    2       Using index
 
9143
2       MATERIALIZED    alias1  index   NULL    col_datetime_key        5       NULL    2       Using index
 
9144
2       MATERIALIZED    alias4  ALL     col_int_key,col_varchar_key     NULL    NULL    NULL    1       NULL
 
9145
2       MATERIALIZED    alias5  ref     col_int_key,col_varchar_key     col_varchar_key 3       test.alias4.col_varchar_key     1       Using where; Using index
 
9146
2       MATERIALIZED    alias3  index   NULL    col_int_key     4       NULL    2       Using index
 
9147
SELECT col_datetime_key
 
9148
FROM t1 as outr
 
9149
WHERE col_datetime_key IN (
 
9150
SELECT alias1.col_datetime_key
 
9151
FROM t1 AS alias1
 
9152
LEFT JOIN t1 as alias3
 
9153
STRAIGHT_JOIN ( t2 AS alias4
 
9154
JOIN t1 AS alias5
 
9155
ON alias5.col_varchar_key <= alias4.col_varchar_nokey )
 
9156
ON alias5.col_int_key < alias4.col_int_key
 
9157
ON alias5.col_varchar_key = alias4.col_varchar_key
 
9158
);
 
9159
col_datetime_key
 
9160
2002-02-13 17:30:06
 
9161
2008-09-27 00:34:58
 
9162
DROP TABLE t1,t2;
 
9163
SET @@optimizer_search_depth=@old_depth;
 
9164
#
 
9165
# Bug#13845930: Segfault in st_join_table::and_with_condition
 
9166
#
 
9167
CREATE TABLE t1 (
 
9168
col_int INTEGER
 
9169
);
 
9170
CREATE TABLE t2 (
 
9171
col_varchar_1 VARCHAR(1),
 
9172
col_varchar_2 VARCHAR(1)
 
9173
);
 
9174
INSERT INTO t2 VALUES ('x','x'), ('c','c');
 
9175
PREPARE stmt FROM '
 
9176
SELECT alias2.col_varchar_2 AS field1
 
9177
FROM t2 AS alias1
 
9178
     JOIN
 
9179
      (t2 AS alias2
 
9180
       LEFT JOIN t2 AS alias3
 
9181
       ON (8, 92) IN
 
9182
          (SELECT sq1_alias1.col_int,
 
9183
                  sq1_alias2.col_int
 
9184
           FROM t1 AS sq1_alias1 JOIN t1 AS sq1_alias2
 
9185
          )
 
9186
      )
 
9187
     ON alias3.col_varchar_1 = alias2.col_varchar_2
 
9188
';
 
9189
EXECUTE stmt;
 
9190
field1
 
9191
EXECUTE stmt;
 
9192
field1
 
9193
DEALLOCATE prepare stmt;
 
9194
DROP TABLE t1, t2;
 
9195
# End of test for bug#13845930.
 
9196
#
 
9197
# Bug#13855925: Assert 'prebuilt->search_tuple->n_fields > 0'
 
9198
#               in ha_innobase::index_read
 
9199
#
 
9200
CREATE TABLE t1 (
 
9201
pk INTEGER AUTO_INCREMENT,
 
9202
col_int_nokey INT,
 
9203
col_int_key INT,
 
9204
col_varchar_key VARCHAR(1),
 
9205
col_varchar_nokey VARCHAR(1),
 
9206
PRIMARY KEY (pk),
 
9207
KEY (col_varchar_key)
 
9208
) ENGINE=INNODB;
 
9209
INSERT INTO t1 (
 
9210
col_int_key, col_int_nokey,
 
9211
col_varchar_key, col_varchar_nokey
 
9212
) VALUES
 
9213
(4, 2, 'v','v'), (62, 150, 'v','v'), (7, NULL, 'c','c'), (1, 2, NULL, NULL),
 
9214
(0, 5, 'x','x'), (7, 3, 'i','i'), (7, 1, 'e','e'), (1, 4, 'p','p'),
 
9215
(7, NULL, 's','s'), (1, 2, 'j','j'), (5, 6, 'z','z'), (2, 6, 'c','c'),
 
9216
(0, 8, 'a','a'), (1, 2, 'q','q'), (8, 6, 'y','y'), (1, 8, NULL, NULL),
 
9217
(1, 3, 'r','r'), (9, 3, 'v','v'), (1, 9, NULL, NULL), (5, 6, 'r','r');
 
9218
CREATE TABLE t2 (
 
9219
pk INT AUTO_INCREMENT,
 
9220
col_int_nokey INT,
 
9221
col_int_key INT,
 
9222
PRIMARY KEY (pk),
 
9223
KEY (col_int_key)
 
9224
) AUTO_INCREMENT=10 ENGINE=INNODB;
 
9225
INSERT INTO t2 (col_int_key, col_int_nokey) VALUES
 
9226
(8, NULL), (7, 8), (1, 1), (7, 9), (9, 4), (NULL, 3), (1, 2), (9, NULL),
 
9227
(2, 2), (9, NULL), (2, 6), (4, 7), (0, 2), (4, 5), (8, 7), (NULL, 6),
 
9228
(NULL, 6), (0, 2), (NULL, 9), (8, 6);
 
9229
CREATE TABLE t3 (
 
9230
pk INT AUTO_INCREMENT,
 
9231
col_varchar_key VARCHAR(1),
 
9232
PRIMARY KEY (pk),
 
9233
KEY (col_varchar_key)
 
9234
) ENGINE=INNODB;
 
9235
INSERT INTO t3 (col_varchar_key) VALUES
 
9236
('c'), ('c'), ('q'), ('g'), ('e'), ('l'), (NULL), ('c'), ('h'), ('d'),
 
9237
('c'), ('i'), ('t'), ('g'), ('q'), ('l'), ('n'), ('z'), ('n'), ('r'), ('p');
 
9238
CREATE VIEW v1 AS
 
9239
SELECT table2.col_varchar_nokey AS field1
 
9240
FROM t2 AS table1
 
9241
INNER JOIN (t1 AS table2
 
9242
STRAIGHT_JOIN t2 AS table3
 
9243
ON table3.col_int_key = table2.pk AND
 
9244
table3.col_int_nokey = ANY
 
9245
(SELECT subquery1_t2.col_int_nokey AS subquery1_field1
 
9246
FROM t2 AS subquery1_t1
 
9247
RIGHT OUTER JOIN t1 AS subquery1_t2
 
9248
INNER JOIN t1 AS subquery1_t3
 
9249
ON subquery1_t3.col_int_key = subquery1_t2.pk
 
9250
ON subquery1_t3.col_varchar_key=subquery1_t2.col_varchar_nokey
 
9251
WHERE subquery1_t1.pk > 1
 
9252
)
 
9253
)
 
9254
ON table3.col_int_key IN
 
9255
(SELECT subquery2_t1.col_int_key AS subquery2_field1
 
9256
FROM t2 AS subquery2_t1
 
9257
RIGHT OUTER JOIN t3 AS subquery2_t2
 
9258
LEFT OUTER JOIN t1 AS subquery2_t3
 
9259
ON subquery2_t3.col_varchar_key = subquery2_t2.col_varchar_key
 
9260
ON subquery2_t3.pk = subquery2_t2.pk
 
9261
)
 
9262
;
 
9263
explain SELECT * FROM v1;
 
9264
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9265
1       SIMPLE  table1  index   NULL    col_int_key     5       NULL    20      Using index
 
9266
1       SIMPLE  <subquery3>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
9267
1       SIMPLE  table2  ALL     PRIMARY NULL    NULL    NULL    20      Using where
 
9268
1       SIMPLE  table3  ref     col_int_key     col_int_key     5       test.table2.pk  1       Using where; Using join buffer (Batched Key Access)
 
9269
1       SIMPLE  <subquery4>     eq_ref  <auto_key>      <auto_key>      5       test.table2.pk  1       NULL
 
9270
3       MATERIALIZED    subquery1_t2    ALL     PRIMARY NULL    NULL    NULL    20      Using where
 
9271
3       MATERIALIZED    subquery1_t3    ref     col_varchar_key col_varchar_key 4       test.subquery1_t2.col_varchar_nokey     1       Using where; Using join buffer (Batched Key Access)
 
9272
3       MATERIALIZED    subquery1_t1    index   PRIMARY col_int_key     5       NULL    20      Using where; Using index
 
9273
4       MATERIALIZED    subquery2_t3    index   PRIMARY,col_varchar_key col_varchar_key 4       NULL    20      Using where; Using index
 
9274
4       MATERIALIZED    subquery2_t2    eq_ref  PRIMARY,col_varchar_key PRIMARY 4       test.subquery2_t3.pk    1       Using where
 
9275
4       MATERIALIZED    subquery2_t1    index   col_int_key     col_int_key     5       NULL    20      Using index
 
9276
SELECT * FROM v1;
 
9277
field1
 
9278
v
 
9279
v
 
9280
v
 
9281
v
 
9282
v
 
9283
v
 
9284
v
 
9285
v
 
9286
v
 
9287
v
 
9288
v
 
9289
v
 
9290
v
 
9291
v
 
9292
v
 
9293
v
 
9294
v
 
9295
v
 
9296
v
 
9297
v
 
9298
DROP VIEW v1;
 
9299
DROP TABLE t1,t2,t3;
 
9300
# End of test for bug#13855925.
 
9301
#
 
9302
# Bug#13897959: Segfault in setup_semijoin_dups_elimination()
 
9303
#
 
9304
CREATE TABLE t1 (
 
9305
col_datetime_key DATETIME DEFAULT NULL,
 
9306
KEY col_datetime_key (col_datetime_key)
 
9307
) ENGINE=MyISAM;
 
9308
INSERT INTO t1 VALUES
 
9309
('2001-04-18 00:00:00'), ('2008-12-18 19:39:55'),
 
9310
('2000-08-01 12:19:39'), ('2004-09-25 21:29:06'),
 
9311
('2009-09-20 09:11:48'), ('2004-03-27 09:32:04');
 
9312
CREATE TABLE t2 (
 
9313
col_date_nokey date DEFAULT NULL,
 
9314
col_time_key time DEFAULT NULL,
 
9315
col_datetime_key datetime DEFAULT NULL,
 
9316
col_varchar_key varchar(1) DEFAULT NULL,
 
9317
col_varchar_nokey varchar(1) DEFAULT NULL,
 
9318
KEY col_time_key (col_time_key),
 
9319
KEY col_datetime_key (col_datetime_key),
 
9320
KEY col_varchar_key(col_varchar_key)
 
9321
) ENGINE=MyISAM;
 
9322
INSERT INTO t2 VALUES ('1900-01-01',NULL,'2001-11-04 19:07:55','x','x');
 
9323
SELECT grandparent1.col_varchar_nokey
 
9324
FROM t2 AS grandparent1 LEFT JOIN t1 USING (col_datetime_key)
 
9325
WHERE grandparent1.col_varchar_nokey IN (
 
9326
SELECT col_varchar_nokey
 
9327
FROM t2 AS parent1
 
9328
WHERE parent1.col_time_key > grandparent1.col_date_nokey
 
9329
);
 
9330
col_varchar_nokey
 
9331
DROP TABLE t1, t2;
 
9332
# End of test for bug#13897959.
 
9333
#
 
9334
# Bug#13898625 ASSERT `(REMAINING_TABLES_AFTER != 0) ...' IN
 
9335
# BEST_EXTENSION_BY_LIMITED_SEARCH
 
9336
#
 
9337
CREATE TABLE t1 (
 
9338
pk int(11) NOT NULL,
 
9339
col_int_nokey INT,
 
9340
col_int_key INT,
 
9341
col_varchar_key VARCHAR(1),
 
9342
col_varchar_nokey VARCHAR(1),
 
9343
PRIMARY KEY (pk),
 
9344
KEY col_int_key (col_int_key),
 
9345
KEY col_varchar_key (col_varchar_key,col_int_key)
 
9346
);
 
9347
INSERT INTO t1 VALUES (26,6,NULL,'f','f');
 
9348
INSERT INTO t1 VALUES (29,6,8,'c','c');
 
9349
CREATE TABLE t2 (
 
9350
pk INT NOT NULL,
 
9351
col_int_nokey INT,
 
9352
col_int_key INT,
 
9353
col_varchar_key VARCHAR(1),
 
9354
col_varchar_nokey VARCHAR(1),
 
9355
PRIMARY KEY (pk),
 
9356
KEY col_int_key (col_int_key),
 
9357
KEY col_varchar_key (col_varchar_key,col_int_key)
 
9358
);
 
9359
INSERT INTO t2 VALUES (1,2,4,'v','v');
 
9360
INSERT INTO t2 VALUES (2,150,62,'v','v');
 
9361
INSERT INTO t2 VALUES (5,5,0,'x','x');
 
9362
INSERT INTO t2 VALUES (6,3,7,'i','i');
 
9363
INSERT INTO t2 VALUES (7,1,7,'e','e');
 
9364
CREATE VIEW view_c AS SELECT * FROM t2;
 
9365
PREPARE prep_stmt_7430 FROM 'SELECT SUM( alias1.col_varchar_key ) AS field1
 
9366
FROM t1 AS alias1
 
9367
RIGHT JOIN t2 AS alias2
 
9368
INNER JOIN t1 AS alias3
 
9369
ON (alias3.col_varchar_key = alias2.col_varchar_key )
 
9370
ON ( "v" ) IN (
 
9371
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
 
9372
FROM t1 AS sq1_alias1
 
9373
)
 
9374
WHERE alias3.pk IN (
 
9375
SELECT sq2_alias1.col_int_key AS sq2_field1
 
9376
FROM ( view_c AS sq2_alias1, t1 AS sq2_alias2 )
 
9377
)
 
9378
';
 
9379
EXECUTE prep_stmt_7430;
 
9380
field1
 
9381
NULL
 
9382
EXECUTE prep_stmt_7430;
 
9383
field1
 
9384
NULL
 
9385
EXPLAIN SELECT SUM( alias1.col_varchar_key ) AS field1
 
9386
FROM t1 AS alias1
 
9387
RIGHT JOIN t2 AS alias2
 
9388
INNER JOIN t1 AS alias3
 
9389
ON (alias3.col_varchar_key = alias2.col_varchar_key )
 
9390
ON ( "v" ) IN (
 
9391
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
 
9392
FROM t1 AS sq1_alias1
 
9393
)
 
9394
WHERE alias3.pk IN (
 
9395
SELECT sq2_alias1.col_int_key AS sq2_field1
 
9396
FROM ( view_c AS sq2_alias1, t1 AS sq2_alias2 )
 
9397
)
 
9398
;
 
9399
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9400
1       SIMPLE  alias3  ALL     PRIMARY,col_varchar_key NULL    NULL    NULL    2       Using where
 
9401
1       SIMPLE  sq2_alias2      index   NULL    PRIMARY 4       NULL    2       Using index
 
9402
1       SIMPLE  t2      ref     col_int_key     col_int_key     5       test.alias3.pk  2       Using index; FirstMatch(alias3)
 
9403
1       SIMPLE  alias2  ref     col_varchar_key col_varchar_key 4       test.alias3.col_varchar_key     1       Using index
 
9404
1       SIMPLE  sq1_alias1      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(alias2)
 
9405
1       SIMPLE  alias1  index   NULL    col_varchar_key 9       NULL    2       Using index
 
9406
PREPARE prep_stmt_7430 FROM 'SELECT SUM( alias1.col_varchar_key ) AS field1
 
9407
FROM t1 AS alias1
 
9408
RIGHT JOIN t2 AS alias2
 
9409
INNER JOIN t1 AS alias3
 
9410
ON (alias3.col_varchar_key = alias2.col_varchar_key )
 
9411
ON ( "v" ) IN (
 
9412
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
 
9413
FROM t1 AS sq1_alias1
 
9414
)
 
9415
WHERE alias3.pk IN (
 
9416
SELECT sq2_alias1.col_int_key AS sq2_field1
 
9417
FROM ( view_c AS sq2_alias1 , t1 AS sq2_alias2 )
 
9418
WHERE sq2_alias1.col_varchar_nokey <> alias2.col_varchar_key
 
9419
AND sq2_alias1.col_varchar_key < "l"
 
9420
  )
 
9421
';
 
9422
EXECUTE prep_stmt_7430;
 
9423
field1
 
9424
NULL
 
9425
EXECUTE prep_stmt_7430;
 
9426
field1
 
9427
NULL
 
9428
EXPLAIN SELECT SUM( alias1.col_varchar_key ) AS field1
 
9429
FROM t1 AS alias1
 
9430
RIGHT JOIN t2 AS alias2
 
9431
INNER JOIN t1 AS alias3
 
9432
ON (alias3.col_varchar_key = alias2.col_varchar_key )
 
9433
ON ( "v" ) IN (
 
9434
SELECT sq1_alias1.col_varchar_nokey AS sq1_field1
 
9435
FROM t1 AS sq1_alias1
 
9436
)
 
9437
WHERE alias3.pk IN (
 
9438
SELECT sq2_alias1.col_int_key AS sq2_field1
 
9439
FROM ( view_c AS sq2_alias1 , t1 AS sq2_alias2 )
 
9440
WHERE sq2_alias1.col_varchar_nokey <> alias2.col_varchar_key
 
9441
AND sq2_alias1.col_varchar_key < "l"
 
9442
  )
 
9443
;
 
9444
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9445
1       SIMPLE  t2      range   col_int_key,col_varchar_key     col_varchar_key 4       NULL    2       Using index condition; Using MRR; Start temporary
 
9446
1       SIMPLE  alias3  eq_ref  PRIMARY,col_varchar_key PRIMARY 4       test.t2.col_int_key     1       Using where; Using join buffer (Batched Key Access)
 
9447
1       SIMPLE  alias2  ref     col_varchar_key col_varchar_key 4       test.alias3.col_varchar_key     1       Using index
 
9448
1       SIMPLE  sq2_alias2      index   NULL    PRIMARY 4       NULL    2       Using index; End temporary
 
9449
1       SIMPLE  sq1_alias1      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(sq2_alias2)
 
9450
1       SIMPLE  alias1  index   NULL    col_varchar_key 9       NULL    2       Using index
 
9451
DROP TABLE t1,t2;
 
9452
DROP VIEW view_c;
 
9453
#
 
9454
# Bug#13902463 SEGFAULT IN BITMAP<64U>::MERGE OR ADD_KEY_FIELD
 
9455
# ON SECOND EXEC OF PREP STMT
 
9456
#
 
9457
CREATE TABLE t1 (
 
9458
pk INT,
 
9459
col_int_nokey INT,
 
9460
col_int_key INT,
 
9461
col_varchar_key VARCHAR(1),
 
9462
col_varchar_nokey VARCHAR(1),
 
9463
KEY col_varchar_key (col_varchar_key)
 
9464
);
 
9465
CREATE VIEW view_b AS SELECT * FROM t1;
 
9466
PREPARE prep_stmt_20421 FROM 'SELECT alias2.col_varchar_nokey AS field1
 
9467
FROM t1 AS alias1
 
9468
INNER JOIN t1 AS alias2
 
9469
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
 
9470
AND ( alias1.col_int_key ) IN (
 
9471
SELECT t1.col_int_nokey
 
9472
FROM t1
 
9473
)
 
9474
)
 
9475
WHERE alias1.col_varchar_key IN (
 
9476
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
 
9477
FROM view_b AS sq2_alias1
 
9478
INNER JOIN t1 AS sq2_alias2
 
9479
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
 
9480
WHERE sq2_alias1.pk > alias2.pk
 
9481
)
 
9482
';
 
9483
EXECUTE prep_stmt_20421;
 
9484
field1
 
9485
EXECUTE prep_stmt_20421;
 
9486
field1
 
9487
EXPLAIN SELECT alias2.col_varchar_nokey AS field1
 
9488
FROM t1 AS alias1
 
9489
INNER JOIN t1 AS alias2
 
9490
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
 
9491
AND ( alias1.col_int_key ) IN (
 
9492
SELECT t1.col_int_nokey
 
9493
FROM t1
 
9494
)
 
9495
)
 
9496
WHERE alias1.col_varchar_key IN (
 
9497
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
 
9498
FROM view_b AS sq2_alias1
 
9499
INNER JOIN t1 AS sq2_alias2
 
9500
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
 
9501
WHERE sq2_alias1.pk > alias2.pk
 
9502
)
 
9503
;
 
9504
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9505
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
9506
ALTER TABLE t1 DROP INDEX col_varchar_key;
 
9507
PREPARE prep_stmt_20421 FROM 'SELECT alias2.col_varchar_nokey AS field1
 
9508
FROM t1 AS alias1
 
9509
INNER JOIN t1 AS alias2
 
9510
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
 
9511
AND ( alias1.col_int_key ) IN (
 
9512
SELECT t1.col_int_nokey
 
9513
FROM t1
 
9514
)
 
9515
)
 
9516
WHERE alias1.col_varchar_key IN (
 
9517
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
 
9518
FROM view_b AS sq2_alias1
 
9519
INNER JOIN t1 AS sq2_alias2
 
9520
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
 
9521
WHERE sq2_alias1.pk > alias2.pk
 
9522
)
 
9523
';
 
9524
EXECUTE prep_stmt_20421;
 
9525
field1
 
9526
EXECUTE prep_stmt_20421;
 
9527
field1
 
9528
EXPLAIN SELECT alias2.col_varchar_nokey AS field1
 
9529
FROM t1 AS alias1
 
9530
INNER JOIN t1 AS alias2
 
9531
ON (alias1.col_varchar_key = alias2.col_varchar_nokey
 
9532
AND ( alias1.col_int_key ) IN (
 
9533
SELECT t1.col_int_nokey
 
9534
FROM t1
 
9535
)
 
9536
)
 
9537
WHERE alias1.col_varchar_key IN (
 
9538
SELECT sq2_alias2.col_varchar_nokey AS sq2_field1
 
9539
FROM view_b AS sq2_alias1
 
9540
INNER JOIN t1 AS sq2_alias2
 
9541
ON (sq2_alias2.col_varchar_key = sq2_alias1.col_varchar_key )
 
9542
WHERE sq2_alias1.pk > alias2.pk
 
9543
)
 
9544
;
 
9545
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9546
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
9547
DROP TABLE t1;
 
9548
DROP VIEW view_b;
 
9549
#
 
9550
# Bug#13907277: Segfault in evaluate_null_complemented_join_record
 
9551
#
 
9552
CREATE TABLE t1 (
 
9553
pk INTEGER,
 
9554
col_varchar_nokey VARCHAR(1),
 
9555
col_varchar_key VARCHAR(1),
 
9556
PRIMARY KEY (pk)
 
9557
);
 
9558
INSERT INTO t1 VALUES (1, 'x', 'x');
 
9559
CREATE TABLE t2 (
 
9560
pk INTEGER,
 
9561
PRIMARY KEY (pk)
 
9562
);
 
9563
INSERT INTO t2 VALUES (1);
 
9564
CREATE TABLE t3 (
 
9565
pk INTEGER,
 
9566
col_int_nokey INTEGER,
 
9567
col_int_key INTEGER,
 
9568
col_varchar_nokey VARCHAR(1),
 
9569
PRIMARY KEY (pk)
 
9570
);
 
9571
INSERT INTO t3 VALUES (1, 6, 5, 'r');
 
9572
explain SELECT outer_t1.pk, outer_t2.pk
 
9573
FROM t3 AS outer_t1
 
9574
RIGHT JOIN t2 AS outer_t2
 
9575
ON outer_t1.col_int_nokey IN
 
9576
(SELECT inner_t1.col_int_nokey
 
9577
FROM t3 AS inner_t1
 
9578
LEFT JOIN t1 AS inner_t2
 
9579
INNER JOIN t1 AS inner_t3
 
9580
ON inner_t3.pk = inner_t2.pk
 
9581
ON inner_t3.col_varchar_nokey = inner_t2.col_varchar_key
 
9582
);
 
9583
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9584
1       SIMPLE  outer_t2        system  NULL    NULL    NULL    NULL    1       NULL
 
9585
1       SIMPLE  outer_t1        ALL     NULL    NULL    NULL    NULL    1       Using where
 
9586
1       SIMPLE  inner_t1        ALL     NULL    NULL    NULL    NULL    1       Using where
 
9587
1       SIMPLE  inner_t2        ALL     PRIMARY NULL    NULL    NULL    1       NULL
 
9588
1       SIMPLE  inner_t3        eq_ref  PRIMARY PRIMARY 4       test.inner_t2.pk        1       Using where; FirstMatch(outer_t1)
 
9589
SELECT outer_t1.pk, outer_t2.pk
 
9590
FROM t3 AS outer_t1
 
9591
RIGHT JOIN t2 AS outer_t2
 
9592
ON outer_t1.col_int_nokey IN
 
9593
(SELECT inner_t1.col_int_nokey
 
9594
FROM t3 AS inner_t1
 
9595
LEFT JOIN t1 AS inner_t2
 
9596
INNER JOIN t1 AS inner_t3
 
9597
ON inner_t3.pk = inner_t2.pk
 
9598
ON inner_t3.col_varchar_nokey = inner_t2.col_varchar_key
 
9599
);
 
9600
pk      pk
 
9601
1       1
 
9602
DROP TABLE t1, t2, t3;
 
9603
# End of test for bug#13907277.
 
9604
#
 
9605
# Bug#13955713: Assert 'JOIN->best_read < ...' on second execution
 
9606
#
 
9607
CREATE TABLE t1 (
 
9608
pk INTEGER,
 
9609
col_varchar_key VARCHAR(1),
 
9610
col_varchar_nokey VARCHAR(1)
 
9611
);
 
9612
PREPARE stmt FROM "
 
9613
SELECT MIN(alias2.col_varchar_key) AS field1
 
9614
FROM t1 AS alias1
 
9615
     INNER JOIN (t1 AS alias2
 
9616
       INNER JOIN t1 AS alias3
 
9617
       ON 8 IN
 
9618
         (SELECT sq1_alias1.pk AS sq1_field2
 
9619
          FROM t1 AS sq1_alias1
 
9620
          WHERE 9 IN
 
9621
             (SELECT SUM(t1_sq1_alias1.pk) AS t1_sq1_field2
 
9622
              FROM t1 AS t1_sq1_alias1
 
9623
             )
 
9624
         )
 
9625
     )
 
9626
     ON alias3.col_varchar_nokey = alias2.col_varchar_key
 
9627
WHERE EXISTS
 
9628
   (SELECT sq2_alias1.pk AS sq2_field1
 
9629
    FROM t1 AS sq2_alias1
 
9630
    WHERE sq2_alias1.col_varchar_key < alias1.col_varchar_nokey
 
9631
   )
 
9632
";
 
9633
EXECUTE stmt;
 
9634
field1
 
9635
NULL
 
9636
EXECUTE stmt;
 
9637
field1
 
9638
NULL
 
9639
DEALLOCATE PREPARE stmt;
 
9640
DROP TABLE t1;
 
9641
# End of test for bug#13955713.
 
9642
#
 
9643
# Bug#13956813: Segfault in memcpy from Join_cache::write_record_data()
 
9644
#
 
9645
CREATE TABLE t1 (
 
9646
pk INT,
 
9647
col_varchar_key VARCHAR(1),
 
9648
col_varchar_nokey VARCHAR(1)
 
9649
);
 
9650
CREATE TABLE t2 (
 
9651
pk INT,
 
9652
col_varchar_key VARCHAR(1),
 
9653
col_varchar_nokey VARCHAR(1)
 
9654
);
 
9655
INSERT INTO t2 VALUES
 
9656
(10,'j','j'), (11,'z','z'), (12,'c','c'), (13,'a','a'),
 
9657
(14,'q','q'), (15,'y','y'), (16,NULL,NULL), (17,'r','r'),
 
9658
(18,'v','v'), (19,NULL,NULL), (20,'r','r');
 
9659
CREATE TABLE t3 (
 
9660
pk INT,
 
9661
col_int_key INT,
 
9662
col_varchar_key VARCHAR(1),
 
9663
KEY col_int_key (col_int_key)
 
9664
);
 
9665
INSERT INTO t3 VALUES
 
9666
(15,NULL,'u'), (16,1,'m'), (17,9,NULL), (18,2,'o'),
 
9667
(19,9,'w'), (20,2,'m'), (21,4,'q'), (22,0,NULL),
 
9668
(23,4,'d'), (24,8,'g'), (25,NULL,'x'), (26,NULL,'f'),
 
9669
(27,0,'p'), (28,NULL,'j'), (29,8,'c');
 
9670
CREATE VIEW view_inline_0 AS
 
9671
SELECT t1.*
 
9672
FROM t1 INNER JOIN t3
 
9673
ON t1.pk = t3.pk;
 
9674
CREATE VIEW view_inline_1 AS
 
9675
SELECT sq2_alias2.col_varchar_key AS sq2_field1,
 
9676
sq2_alias1.col_varchar_key AS sq2_field2
 
9677
FROM t3 AS sq2_alias1 LEFT OUTER JOIN t3 AS sq2_alias2
 
9678
ON sq2_alias1.pk = sq2_alias2.col_int_key;
 
9679
CREATE VIEW view_inline_2 AS
 
9680
SELECT 'p', 'p' UNION SELECT 'k', 's';
 
9681
explain SELECT SUM(alias1.col_varchar_nokey) AS field2
 
9682
FROM t2 AS alias2
 
9683
LEFT JOIN (SELECT * FROM view_inline_0) AS alias1
 
9684
ON alias2.col_varchar_key = alias1.col_varchar_key AND
 
9685
(alias2.col_varchar_nokey, alias2.col_varchar_key) IN
 
9686
(SELECT * FROM view_inline_1
 
9687
)
 
9688
WHERE (alias1.col_varchar_key, alias1.col_varchar_nokey) IN
 
9689
(SELECT * FROM view_inline_2
 
9690
);
 
9691
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9692
1       PRIMARY alias2  ALL     NULL    NULL    NULL    NULL    11      Using where
 
9693
1       PRIMARY <subquery3>     eq_ref  <auto_key>      <auto_key>      8       test.alias2.col_varchar_nokey,test.alias2.col_varchar_key       1       NULL
 
9694
1       PRIMARY <subquery4>     ALL     NULL    NULL    NULL    NULL    NULL    Using where
 
9695
1       PRIMARY <derived2>      ref     <auto_key0>     <auto_key0>     8       test.alias2.col_varchar_key,<subquery4>.My_exp_p        2       NULL
 
9696
3       MATERIALIZED    sq2_alias1      ALL     NULL    NULL    NULL    NULL    15      NULL
 
9697
3       MATERIALIZED    sq2_alias2      ref     col_int_key     col_int_key     5       test.sq2_alias1.pk      2       Using join buffer (Batched Key Access)
 
9698
4       MATERIALIZED    <derived7>      ALL     NULL    NULL    NULL    NULL    2       NULL
 
9699
7       DERIVED NULL    NULL    NULL    NULL    NULL    NULL    NULL    No tables used
 
9700
8       UNION   NULL    NULL    NULL    NULL    NULL    NULL    NULL    No tables used
 
9701
NULL    UNION RESULT    <union7,8>      ALL     NULL    NULL    NULL    NULL    NULL    Using temporary
 
9702
2       DERIVED NULL    NULL    NULL    NULL    NULL    NULL    NULL    no matching row in const table
 
9703
SELECT SUM(alias1.col_varchar_nokey) AS field2
 
9704
FROM t2 AS alias2
 
9705
LEFT JOIN (SELECT * FROM view_inline_0) AS alias1
 
9706
ON alias2.col_varchar_key = alias1.col_varchar_key AND
 
9707
(alias2.col_varchar_nokey, alias2.col_varchar_key) IN
 
9708
(SELECT * FROM view_inline_1
 
9709
)
 
9710
WHERE (alias1.col_varchar_key, alias1.col_varchar_nokey) IN
 
9711
(SELECT * FROM view_inline_2
 
9712
);
 
9713
field2
 
9714
NULL
 
9715
DROP VIEW view_inline_0, view_inline_1, view_inline_2;
 
9716
DROP TABLE t1, t2, t3;
 
9717
# End of test for bug#13956813.
 
9718
#
 
9719
# Bug#13974177: Assert !(tab->table->regginfo.not_exists_optimize...
 
9720
#
 
9721
CREATE TABLE t1 (
 
9722
pk INTEGER AUTO_INCREMENT,
 
9723
col_int_nokey INTEGER,
 
9724
col_int_key INTEGER,
 
9725
col_varchar_key VARCHAR(1),
 
9726
col_varchar_nokey VARCHAR(1),
 
9727
PRIMARY KEY (pk),
 
9728
KEY (col_int_key),
 
9729
KEY (col_varchar_key, col_int_key)
 
9730
);
 
9731
INSERT INTO t1(col_int_key, col_int_nokey, col_varchar_key, col_varchar_nokey)
 
9732
VALUES
 
9733
(0, 4, 'j', 'j'), (8, 6, 'v', 'v'), (1, 3, 'c', 'c'), (8, 5, 'm', 'm'),
 
9734
(9, 3, 'd', 'd'), (24, 246, 'd', 'd'), (6, 2, 'y', 'y'), (1, 9, 't', 't'),
 
9735
(6, 3, 'd', 'd'), (2, 8, 's', 's'), (4, 1, 'r', 'r'), (8, 8, 'm', 'm'),
 
9736
(4, 8, 'b', 'b'), (4, 5, 'x', 'x'), (7, 7, 'g', 'g'), (4, 5, 'p', 'p'),
 
9737
(1, 1, 'q', 'q'), (9, 6, 'w', 'w'), (4, 2, 'd', 'd'), (8, 9, 'e', 'e');
 
9738
CREATE TABLE t2 (
 
9739
pk INTEGER AUTO_INCREMENT,
 
9740
col_int_nokey INTEGER NOT NULL,
 
9741
col_time_key TIME NOT NULL,
 
9742
col_time_nokey TIME NOT NULL,
 
9743
PRIMARY KEY (pk),
 
9744
KEY (col_time_key)
 
9745
) ENGINE=InnoDB;
 
9746
INSERT INTO t2 (col_int_nokey, col_time_key, col_time_nokey) VALUES
 
9747
(7, '00:00:00', '00:00:00'), (0, '00:00:00', '00:00:00'),
 
9748
(9, '06:35:17', '06:35:17'), (3, '18:07:14', '18:07:14'),
 
9749
(4, '20:36:52', '20:36:52'), (2, '21:29:07', '21:29:07'),
 
9750
(5, '23:45:57', '23:45:57'), (3, '22:54:57', '22:54:57'),
 
9751
(1, '18:45:09', '18:45:09'), (3, '14:30:46', '14:30:46'),
 
9752
(6, '19:23:43', '19:23:43'), (7, '03:39:30', '03:39:30'),
 
9753
(5, '23:37:52', '23:37:52'), (1, '16:59:30', '16:59:30'),
 
9754
(204, '22:21:15', '22:21:15'), (224, '12:24:37', '12:24:37'),
 
9755
(9, '15:02:08', '15:02:08'), (5, '23:59:59', '23:59:59'),
 
9756
(0, '08:23:30', '08:23:30'), (3, '08:32:22', '08:32:22');
 
9757
explain SELECT ot1.col_int_key AS x
 
9758
FROM t1 AS ot2
 
9759
LEFT JOIN t1 AS ot1
 
9760
ON ot2.col_varchar_nokey > ot1.col_varchar_key
 
9761
WHERE (ot1.col_int_nokey, ot1.pk) IN
 
9762
(SELECT it1.pk AS x,
 
9763
it1.col_int_nokey AS y
 
9764
FROM t2 AS it2
 
9765
LEFT JOIN t2 AS it1
 
9766
ON it2.col_time_nokey = it1.col_time_key
 
9767
) AND ot1.pk IS NULL
 
9768
;
 
9769
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9770
1       SIMPLE  ot1     const   PRIMARY,col_varchar_key PRIMARY 4       const   1       Using where
 
9771
1       SIMPLE  it1     eq_ref  PRIMARY,col_time_key    PRIMARY 4       test.ot1.col_int_nokey  1       Using where
 
9772
1       SIMPLE  it2     ALL     NULL    NULL    NULL    NULL    20      Using where; FirstMatch(it1)
 
9773
1       SIMPLE  ot2     ALL     NULL    NULL    NULL    NULL    20      Using where
 
9774
SELECT ot1.col_int_key AS x
 
9775
FROM t1 AS ot2
 
9776
LEFT JOIN t1 AS ot1
 
9777
ON ot2.col_varchar_nokey > ot1.col_varchar_key
 
9778
WHERE (ot1.col_int_nokey, ot1.pk) IN
 
9779
(SELECT it1.pk AS x,
 
9780
it1.col_int_nokey AS y
 
9781
FROM t2 AS it2
 
9782
LEFT JOIN t2 AS it1
 
9783
ON it2.col_time_nokey = it1.col_time_key
 
9784
) AND ot1.pk IS NULL
 
9785
;
 
9786
x
 
9787
DROP TABLE t1, t2;
 
9788
# End of test for bug#13974177.
 
9789
#
 
9790
# Bug#13971022: Assert 'keyparts > 0' failed in create_ref_for_key...
 
9791
#
 
9792
CREATE TABLE t1 (
 
9793
pk INT,
 
9794
col_int_key INT,
 
9795
col_varchar_key VARCHAR(1),
 
9796
PRIMARY KEY (pk),
 
9797
KEY col_varchar_key (col_varchar_key,col_int_key)
 
9798
);
 
9799
CREATE TABLE t2 (
 
9800
pk INT,
 
9801
col_int_key INT,
 
9802
col_varchar_key VARCHAR(1),
 
9803
col_varchar_nokey VARCHAR(1),
 
9804
PRIMARY KEY (pk)
 
9805
) ENGINE=InnoDB;
 
9806
CREATE TABLE t3 (
 
9807
i INT
 
9808
);
 
9809
explain SELECT table1.pk AS field1
 
9810
FROM ( SELECT subquery1_t1. *
 
9811
FROM t2 AS subquery1_t1
 
9812
JOIN t2 AS subquery1_t2
 
9813
ON subquery1_t2.pk = subquery1_t1.pk) AS table1
 
9814
STRAIGHT_JOIN t2 AS table2
 
9815
ON table1.col_int_key IN (SELECT 7 FROM t3)
 
9816
WHERE table1.col_varchar_nokey IN
 
9817
(SELECT subquery3_t1.col_varchar_key AS subquery3_field1
 
9818
FROM t1 AS subquery3_t1
 
9819
)
 
9820
;
 
9821
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
9822
1       PRIMARY subquery3_t1    index   col_varchar_key col_varchar_key 9       NULL    0       Using where; Using index
 
9823
1       PRIMARY <subquery3>     ALL     NULL    NULL    NULL    NULL    NULL    NULL
 
9824
1       PRIMARY <derived2>      ref     <auto_key0>     <auto_key0>     9       <subquery3>.7,test.subquery3_t1.col_varchar_key 2       Using where
 
9825
1       PRIMARY table2  index   NULL    PRIMARY 4       NULL    1       Using index
 
9826
3       MATERIALIZED    t3      ALL     NULL    NULL    NULL    NULL    0       NULL
 
9827
2       DERIVED subquery1_t1    ALL     PRIMARY NULL    NULL    NULL    1       NULL
 
9828
2       DERIVED subquery1_t2    eq_ref  PRIMARY PRIMARY 4       test.subquery1_t1.pk    1       Using index
 
9829
SELECT table1.pk AS field1
 
9830
FROM ( SELECT subquery1_t1. *
 
9831
FROM t2 AS subquery1_t1
 
9832
JOIN t2 AS subquery1_t2
 
9833
ON subquery1_t2.pk = subquery1_t1.pk) AS table1
 
9834
STRAIGHT_JOIN t2 AS table2
 
9835
ON table1.col_int_key IN (SELECT 7 FROM t3)
 
9836
WHERE table1.col_varchar_nokey IN
 
9837
(SELECT subquery3_t1.col_varchar_key AS subquery3_field1
 
9838
FROM t1 AS subquery3_t1
 
9839
)
 
9840
;
 
9841
field1
 
9842
DROP TABLE t1, t2, t3;
 
9843
# End of test for bug#13971022.
 
9844
#
 
9845
# Bug#13623473 "MISSING ROWS ON SELECT AND JOIN WITH
 
9846
# TIME/DATETIME COMPARE" - Subquery part of test.
 
9847
#
 
9848
SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-31 10:14:35');
 
9849
CREATE TABLE t1 (
 
9850
pk INT NOT NULL,
 
9851
col_int_nokey INT,
 
9852
col_int_key INT NOT NULL,
 
9853
PRIMARY KEY (pk),
 
9854
KEY col_int_key (col_int_key)
 
9855
) ENGINE=InnoDB;
 
9856
INSERT INTO t1 VALUES (10,1,7), (11,7,0), (12,4,9), (13,7,3),
 
9857
(14,0,4), (15,2,2), (16,9,5), (17,4,3), (18,0,1), (19,9,3), (20,1,6),
 
9858
(21,3,7), (22,8,5), (23,8,1), (24,18,204), (25,84,224), (26,6,9),
 
9859
(27,3,5), (28,6,0), (29,6,3);
 
9860
CREATE TABLE t2 (
 
9861
col_int_nokey INT NOT NULL,
 
9862
col_datetime_key DATETIME NOT NULL,
 
9863
col_varchar_key VARCHAR(1) NOT NULL,
 
9864
KEY col_datetime_key (col_datetime_key),
 
9865
KEY col_varchar_key (col_varchar_key)
 
9866
) ENGINE=InnoDB;
 
9867
INSERT INTO t2 VALUES (1,'2001-11-04 19:07:55','k');
 
9868
CREATE TABLE t3 (
 
9869
col_time_key TIME,
 
9870
KEY col_time_key (col_time_key)
 
9871
) ENGINE=InnoDB;
 
9872
INSERT INTO t3 VALUES ('21:22:34'), ('10:50:38'), ('00:21:38'),
 
9873
('04:08:02'), ('16:25:11'), ('10:14:58'), ('19:47:59'), ('11:14:24'),
 
9874
('00:00:00'), ('00:00:00'), ('15:57:25'), ('07:05:51'), ('19:22:21'),
 
9875
('03:53:16'), ('09:16:38'), ('15:37:26'), ('00:00:00'), ('05:03:03'),
 
9876
('02:59:24'), ('00:01:58');
 
9877
EXPLAIN EXTENDED SELECT outr.col_int_nokey
 
9878
FROM t2 as outr
 
9879
STRAIGHT_JOIN t3 AS outr2
 
9880
ON outr2.col_time_key > outr.col_datetime_key
 
9881
WHERE outr.col_int_nokey IN (
 
9882
SELECT col_int_key
 
9883
FROM t1 AS innr
 
9884
WHERE innr.pk >= innr.col_int_nokey
 
9885
) AND (
 
9886
outr.col_int_nokey <= 6
 
9887
OR
 
9888
outr.col_varchar_key IS NULL
 
9889
);
 
9890
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
 
9891
1       SIMPLE  outr    ALL     col_datetime_key        NULL    NULL    NULL    1       100.00  Using where
 
9892
1       SIMPLE  innr    ref     col_int_key     col_int_key     4       test.outr.col_int_nokey 1       100.00  Using where; FirstMatch(outr); Using join buffer (Batched Key Access)
 
9893
1       SIMPLE  outr2   ALL     col_time_key    NULL    NULL    NULL    20      100.00  Range checked for each record (index map: 0x1)
 
9894
Warnings:
 
9895
Note    1003    /* select#1 */ select `test`.`outr`.`col_int_nokey` AS `col_int_nokey` from `test`.`t2` `outr` semi join (`test`.`t1` `innr`) straight_join `test`.`t3` `outr2` 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 (`test`.`outr2`.`col_time_key` > `test`.`outr`.`col_datetime_key`))
 
9896
SELECT outr.col_int_nokey
 
9897
FROM t2 as outr
 
9898
STRAIGHT_JOIN t3 AS outr2
 
9899
ON outr2.col_time_key > outr.col_datetime_key
 
9900
WHERE outr.col_int_nokey IN (
 
9901
SELECT col_int_key
 
9902
FROM t1 AS innr
 
9903
WHERE innr.pk >= innr.col_int_nokey
 
9904
) AND (
 
9905
outr.col_int_nokey <= 6
 
9906
OR
 
9907
outr.col_varchar_key IS NULL
 
9908
);
 
9909
col_int_nokey
 
9910
1
 
9911
1
 
9912
1
 
9913
1
 
9914
1
 
9915
1
 
9916
1
 
9917
1
 
9918
1
 
9919
1
 
9920
1
 
9921
1
 
9922
1
 
9923
1
 
9924
1
 
9925
1
 
9926
1
 
9927
1
 
9928
1
 
9929
1
 
9930
DROP TABLE t1,t2,t3;
 
9931
SET TIMESTAMP = DEFAULT;
 
9932
# End of test for bug#13623473.
 
9933
#
 
9934
# Bug#13980954: Missing data on left join + null value + where..in
 
9935
#
 
9936
CREATE TABLE t1 (
 
9937
ik INT,
 
9938
vc varchar(1)
 
9939
);
 
9940
INSERT INTO t1 VALUES (8, 'x'), (NULL, 'x');
 
9941
CREATE TABLE t2 (
 
9942
ik INT,
 
9943
vc varchar(1)
 
9944
);
 
9945
INSERT INTO t2 VALUES
 
9946
(0, 'x'), (7, 'i'), (7, 'e'), (1, 'p'), (7, 's'), (1, 'j');
 
9947
explain format=json SELECT t2.vc, t2.ik AS t2_ik, t1.ik AS t1_ik
 
9948
FROM t2 LEFT JOIN t1 ON t2.vc=t1.vc
 
9949
WHERE t2.vc IN (SELECT vc FROM t2 AS t3);
 
9950
EXPLAIN
 
9951
{
 
9952
  "query_block": {
 
9953
    "select_id": 1,
 
9954
    "nested_loop": [
 
9955
      {
 
9956
        "table": {
 
9957
          "table_name": "t2",
 
9958
          "access_type": "ALL",
 
9959
          "rows": 6,
 
9960
          "filtered": 100,
 
9961
          "attached_condition": "(`test`.`t2`.`vc` is not null)"
 
9962
        }
 
9963
      },
 
9964
      {
 
9965
        "table": {
 
9966
          "table_name": "<subquery2>",
 
9967
          "access_type": "eq_ref",
 
9968
          "key": "<auto_key>",
 
9969
          "key_length": "4",
 
9970
          "ref": [
 
9971
            "test.t2.vc"
 
9972
          ],
 
9973
          "rows": 1,
 
9974
          "materialized_from_subquery": {
 
9975
            "using_temporary_table": true,
 
9976
            "query_block": {
 
9977
              "table": {
 
9978
                "table_name": "t3",
 
9979
                "access_type": "ALL",
 
9980
                "rows": 6,
 
9981
                "filtered": 100
 
9982
              }
 
9983
            }
 
9984
          }
 
9985
        }
 
9986
      },
 
9987
      {
 
9988
        "table": {
 
9989
          "table_name": "t1",
 
9990
          "access_type": "ALL",
 
9991
          "rows": 2,
 
9992
          "filtered": 100,
 
9993
          "attached_condition": "<if>(is_not_null_compl(t1), (`test`.`t1`.`vc` = `test`.`t2`.`vc`), true)"
 
9994
        }
 
9995
      }
 
9996
    ]
 
9997
  }
 
9998
}
 
9999
Warnings:
 
10000
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` semi join (`test`.`t2` `t3`) left join `test`.`t1` on((`test`.`t1`.`vc` = `test`.`t2`.`vc`)) where (`<subquery2>`.`vc` = `test`.`t2`.`vc`)
 
10001
SELECT t2.vc, t2.ik AS t2_ik, t1.ik AS t1_ik
 
10002
FROM t2 LEFT JOIN t1 ON t2.vc=t1.vc
 
10003
WHERE t2.vc IN (SELECT vc FROM t2 AS t3);
 
10004
vc      t2_ik   t1_ik
 
10005
x       0       8
 
10006
x       0       NULL
 
10007
i       7       NULL
 
10008
e       7       NULL
 
10009
p       1       NULL
 
10010
s       7       NULL
 
10011
j       1       NULL
 
10012
DROP TABLE t1, t2;
 
10013
# End of test for bug#13980954.
 
10014
#
 
10015
# Bug#14048292: Segfault in Item_field::result_type on 2nd execution
 
10016
#               of prep stmt with join of view
 
10017
#
 
10018
CREATE TABLE t1 (
 
10019
col_int INT
 
10020
);
 
10021
INSERT INTO t1 VALUES (0), (1);
 
10022
CREATE VIEW view_t1 AS SELECT * FROM t1;
 
10023
explain SELECT alias1.col_int
 
10024
FROM t1 AS alias1
 
10025
LEFT JOIN view_t1 AS alias2
 
10026
ON alias1.col_int IN
 
10027
(SELECT sq1_alias1.col_int
 
10028
FROM t1 AS sq1_alias1
 
10029
);
 
10030
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
 
10031
1       SIMPLE  alias1  ALL     NULL    NULL    NULL    NULL    2       NULL
 
10032
1       SIMPLE  sq1_alias1      ALL     NULL    NULL    NULL    NULL    2       Using where; FirstMatch(alias1)
 
10033
1       SIMPLE  t1      ALL     NULL    NULL    NULL    NULL    2       NULL
 
10034
PREPARE stmt FROM "SELECT alias1.col_int
 
10035
FROM t1 AS alias1
 
10036
LEFT JOIN view_t1 AS alias2
 
10037
ON alias1.col_int IN
 
10038
(SELECT sq1_alias1.col_int
 
10039
FROM t1 AS sq1_alias1
 
10040
)";
 
10041
EXECUTE stmt;
 
10042
col_int
 
10043
0
 
10044
0
 
10045
1
 
10046
1
 
10047
EXECUTE stmt;
 
10048
col_int
 
10049
0
 
10050
0
 
10051
1
 
10052
1
 
10053
DEALLOCATE PREPARE stmt;
 
10054
DROP VIEW view_t1;
 
10055
DROP TABLE t1;
 
10056
# End of test for bug#14048292.
 
10057
#
 
10058
# Bug#14064201: Missing data on join of derived table + WHERE .. IN
 
10059
#               with two operands
 
10060
#
 
10061
CREATE TABLE t1 (
 
10062
col_varchar_nokey VARCHAR(1)
 
10063
);
 
10064
INSERT INTO t1 VALUES
 
10065
('v'), ('s'), ('l'), ('y'), ('c'), ('i'), ('h'), ('q'), ('a'), ('v'),
 
10066
('u'), ('s'), ('y'), ('z'), ('h'), ('p'), ('e'), ('i'), ('y'), ('w');
 
10067
CREATE TABLE t2 (
 
10068
col_varchar_key VARCHAR(1),
 
10069
col_varchar_nokey VARCHAR(1),
 
10070
KEY col_varchar_key(col_varchar_key)
 
10071
);
 
10072
INSERT INTO t2 VALUES
 
10073
('j','j'), ('v','v'), ('c','c'), ('m','m'), ('d','d'), ('d','d'), ('y','y');
 
10074
explain format=json SELECT *
 
10075
FROM (SELECT * FROM t2) AS derived1
 
10076
LEFT JOIN t1
 
10077
USING (col_varchar_nokey)
 
10078
WHERE (col_varchar_nokey, col_varchar_nokey) IN
 
10079
(SELECT col_varchar_nokey, col_varchar_key
 
10080
FROM t2 AS derived2
 
10081
);
 
10082
EXPLAIN
 
10083
{
 
10084
  "query_block": {
 
10085
    "select_id": 1,
 
10086
    "nested_loop": [
 
10087
      {
 
10088
        "table": {
 
10089
          "table_name": "<subquery3>",
 
10090
          "access_type": "ALL",
 
10091
          "attached_condition": "((`<subquery3>`.`col_varchar_key` = `<subquery3>`.`col_varchar_nokey`) and (`<subquery3>`.`col_varchar_nokey` is not null))",
 
10092
          "materialized_from_subquery": {
 
10093
            "using_temporary_table": true,
 
10094
            "query_block": {
 
10095
              "table": {
 
10096
                "table_name": "derived2",
 
10097
                "access_type": "ALL",
 
10098
                "possible_keys": [
 
10099
                  "col_varchar_key"
 
10100
                ],
 
10101
                "rows": 7,
 
10102
                "filtered": 100,
 
10103
                "attached_condition": "(`test`.`derived2`.`col_varchar_key` = `test`.`derived2`.`col_varchar_nokey`)"
 
10104
              }
 
10105
            }
 
10106
          }
 
10107
        }
 
10108
      },
 
10109
      {
 
10110
        "table": {
 
10111
          "table_name": "derived1",
 
10112
          "access_type": "ref",
 
10113
          "possible_keys": [
 
10114
            "<auto_key0>"
 
10115
          ],
 
10116
          "key": "<auto_key0>",
 
10117
          "used_key_parts": [
 
10118
            "col_varchar_nokey"
 
10119
          ],
 
10120
          "key_length": "4",
 
10121
          "ref": [
 
10122
            "<subquery3>.col_varchar_nokey"
 
10123
          ],
 
10124
          "rows": 2,
 
10125
          "filtered": 100,
 
10126
          "materialized_from_subquery": {
 
10127
            "using_temporary_table": true,
 
10128
            "dependent": false,
 
10129
            "cacheable": true,
 
10130
            "query_block": {
 
10131
              "select_id": 2,
 
10132
              "table": {
 
10133
                "table_name": "t2",
 
10134
                "access_type": "ALL",
 
10135
                "rows": 7,
 
10136
                "filtered": 100
 
10137
              }
 
10138
            }
 
10139
          }
 
10140
        }
 
10141
      },
 
10142
      {
 
10143
        "table": {
 
10144
          "table_name": "t1",
 
10145
          "access_type": "ALL",
 
10146
          "rows": 20,
 
10147
          "filtered": 100,
 
10148
          "attached_condition": "<if>(is_not_null_compl(t1), (`test`.`t1`.`col_varchar_nokey` = `derived1`.`col_varchar_nokey`), true)"
 
10149
        }
 
10150
      }
 
10151
    ]
 
10152
  }
 
10153
}
 
10154
Warnings:
 
10155
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` semi join (`test`.`t2` `derived2`) left join `test`.`t1` on(((`test`.`t1`.`col_varchar_nokey` = `derived1`.`col_varchar_nokey`) and (`test`.`derived2`.`col_varchar_nokey` = `test`.`derived2`.`col_varchar_key`))) where ((`<subquery3>`.`col_varchar_key` = `<subquery3>`.`col_varchar_nokey`) and (`derived1`.`col_varchar_nokey` = `<subquery3>`.`col_varchar_nokey`) and (`test`.`derived2`.`col_varchar_key` = `test`.`derived2`.`col_varchar_nokey`))
 
10156
SELECT *
 
10157
FROM (SELECT * FROM t2) AS derived1
 
10158
LEFT JOIN t1
 
10159
USING (col_varchar_nokey)
 
10160
WHERE (col_varchar_nokey, col_varchar_nokey) IN
 
10161
(SELECT col_varchar_nokey, col_varchar_key
 
10162
FROM t2 AS derived2
 
10163
);
 
10164
col_varchar_nokey       col_varchar_key
 
10165
j       j
 
10166
v       v
 
10167
v       v
 
10168
c       c
 
10169
m       m
 
10170
d       d
 
10171
d       d
 
10172
y       y
 
10173
y       y
 
10174
y       y
 
10175
DROP TABLE t1, t2;
 
10176
CREATE TABLE t1 (
 
10177
col_int_nokey int NOT NULL,
 
10178
col_int_key int NOT NULL,
 
10179
KEY col_int_key (col_int_key)
 
10180
);
 
10181
INSERT INTO t1 VALUES
 
10182
(1,7), (7,0), (4,9), (7,3), (0,4), (2,2), (9,5), (4,3), (0,1), (9,3),
 
10183
(1,6), (3,7), (8,5), (8,1), (18,204), (84,224), (6,9), (3,5), (6,0), (6,3);
 
10184
CREATE TABLE t2 (
 
10185
col_int_nokey int NOT NULL,
 
10186
col_int_key int NOT NULL,
 
10187
KEY col_int_key (col_int_key)
 
10188
);
 
10189
INSERT INTO t2 VALUES
 
10190
(4,0), (6,8), (3,1), (5,8), (3,9), (246,24), (2,6), (9,1), (3,6), (8,2),
 
10191
(1,4), (8,8), (8,4), (5,4), (7,7), (5,4), (1,1), (6,9), (2,4), (9,8);
 
10192
explain format=json SELECT grandparent1.*
 
10193
FROM t1 AS grandparent1
 
10194
LEFT JOIN t1 USING (col_int_nokey)
 
10195
WHERE (col_int_nokey, col_int_nokey) IN
 
10196
(SELECT col_int_nokey, col_int_key
 
10197
FROM t2
 
10198
);
 
10199
EXPLAIN
 
10200
{
 
10201
  "query_block": {
 
10202
    "select_id": 1,
 
10203
    "nested_loop": [
 
10204
      {
 
10205
        "table": {
 
10206
          "table_name": "grandparent1",
 
10207
          "access_type": "ALL",
 
10208
          "rows": 20,
 
10209
          "filtered": 100,
 
10210
          "attached_condition": "((`test`.`grandparent1`.`col_int_nokey` is not null) and (`test`.`grandparent1`.`col_int_nokey` is not null))"
 
10211
        }
 
10212
      },
 
10213
      {
 
10214
        "table": {
 
10215
          "table_name": "<subquery2>",
 
10216
          "access_type": "eq_ref",
 
10217
          "key": "<auto_key>",
 
10218
          "key_length": "8",
 
10219
          "ref": [
 
10220
            "test.grandparent1.col_int_nokey",
 
10221
            "test.grandparent1.col_int_nokey"
 
10222
          ],
 
10223
          "rows": 1,
 
10224
          "materialized_from_subquery": {
 
10225
            "using_temporary_table": true,
 
10226
            "query_block": {
 
10227
              "table": {
 
10228
                "table_name": "t2",
 
10229
                "access_type": "ALL",
 
10230
                "possible_keys": [
 
10231
                  "col_int_key"
 
10232
                ],
 
10233
                "rows": 20,
 
10234
                "filtered": 100,
 
10235
                "attached_condition": "(`test`.`t2`.`col_int_key` = `test`.`t2`.`col_int_nokey`)"
 
10236
              }
 
10237
            }
 
10238
          }
 
10239
        }
 
10240
      },
 
10241
      {
 
10242
        "table": {
 
10243
          "table_name": "t1",
 
10244
          "access_type": "ALL",
 
10245
          "rows": 20,
 
10246
          "filtered": 100,
 
10247
          "attached_condition": "<if>(is_not_null_compl(t1), (`test`.`t1`.`col_int_nokey` = `test`.`grandparent1`.`col_int_nokey`), true)"
 
10248
        }
 
10249
      }
 
10250
    ]
 
10251
  }
 
10252
}
 
10253
Warnings:
 
10254
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` semi join (`test`.`t2`) left join `test`.`t1` on(((`test`.`t1`.`col_int_nokey` = `test`.`grandparent1`.`col_int_nokey`) and (`test`.`t2`.`col_int_nokey` = `test`.`t2`.`col_int_key`))) where ((`<subquery2>`.`col_int_nokey` = `test`.`grandparent1`.`col_int_nokey`) and (`<subquery2>`.`col_int_key` = `test`.`grandparent1`.`col_int_nokey`) and (`test`.`t2`.`col_int_key` = `test`.`t2`.`col_int_nokey`))
 
10255
SELECT grandparent1.*
 
10256
FROM t1 AS grandparent1
 
10257
LEFT JOIN t1 USING (col_int_nokey)
 
10258
WHERE (col_int_nokey, col_int_nokey) IN
 
10259
(SELECT col_int_nokey, col_int_key
 
10260
FROM t2
 
10261
);
 
10262
col_int_nokey   col_int_key
 
10263
1       7
 
10264
1       7
 
10265
7       0
 
10266
7       0
 
10267
7       3
 
10268
7       3
 
10269
1       6
 
10270
1       6
 
10271
8       5
 
10272
8       5
 
10273
8       1
 
10274
8       1
 
10275
DROP TABLE t1, t2;
 
10276
CREATE TABLE t1 (  
 
10277
pk int,  
 
10278
col_int_key int,  
 
10279
col_datetime_key datetime,  
 
10280
col_varchar_key varchar(1),  
 
10281
col_varchar_nokey varchar(1),  
 
10282
PRIMARY KEY (pk),  
 
10283
KEY col_int_key (col_int_key),  
 
10284
KEY col_datetime_key (col_datetime_key),  
 
10285
KEY col_varchar_key (col_varchar_key,col_int_key)
 
10286
) engine=MyISAM;
 
10287
INSERT INTO t1 VALUES
 
10288
(10,7,'2004-06-06 04:22:12','v','v'), (11,0,'2005-11-13 01:12:31','s','s'),
 
10289
(12,9,'2002-05-04 01:50:00','l','l'), (13,3,'2004-10-27 10:28:45','y','y'),
 
10290
(14,4,'2006-07-22 05:24:23','c','c'), (15,2,'2002-05-16 21:34:03','i','i'),
 
10291
(16,5,'2008-04-17 10:45:30','h','h'), (17,3,'2009-04-21 02:58:02','q','q'),
 
10292
(18,1,'2008-01-11 11:01:51','a','a'), (19,3,'1900-01-01 00:00:00','v','v'),
 
10293
(20,6,'2007-05-17 18:24:57','u','u'), (21,7,'2007-08-07 00:00:00','s','s'),
 
10294
(22,5,'2001-08-28 00:00:00','y','y'), (23,1,'2004-04-16 00:27:28','z','z'),
 
10295
(24,204,'2005-05-03 07:06:22','h','h'), (25,224,'2009-03-11 17:09:50','p','p'),
 
10296
(26,9,'2007-12-08 01:54:28','e','e'), (27,5,'2009-07-28 18:19:54','i','i'),
 
10297
(28,0,'2008-06-08 00:00:00','y','y'), (29,3,'2005-02-09 09:20:26','w','w');
 
10298
CREATE TABLE t2 (
 
10299
pk int,
 
10300
col_int_key int,
 
10301
col_datetime_key datetime,
 
10302
col_varchar_key varchar(1),
 
10303
col_varchar_nokey varchar(1),
 
10304
PRIMARY KEY (pk),
 
10305
KEY col_int_key (col_int_key),
 
10306
KEY col_datetime_key (col_datetime_key),
 
10307
KEY col_varchar_key (col_varchar_key,col_int_key)
 
10308
) engine=MyISAM;
 
10309
INSERT INTO t2 VALUES
 
10310
(1,0,'2002-02-13 17:30:06','j','j'), (2,8,'2008-09-27 00:34:58','v','v'),
 
10311
(3,1,'2007-05-28 00:00:00','c','c'), (4,8,'2009-07-25 09:21:20','m','m'),
 
10312
(5,9,'2002-01-16 00:00:00','d','d'), (6,24,'2006-10-12 04:32:53','d','d'),
 
10313
(7,6,'2001-02-15 03:08:38','y','y'), (8,1,'2004-10-02 20:31:15','t','t'),
 
10314
(9,6,'2002-08-20 22:48:00','d','d'), (10,2,'1900-01-01 00:00:00','s','s'),
 
10315
(11,4,'2005-08-15 00:00:00','r','r'), (12,8,'1900-01-01 00:00:00','m','m'),
 
10316
(13,4,'2008-05-16 08:09:06','b','b'), (14,4,'2001-01-20 12:47:23','x','x'),
 
10317
(15,7,'2008-07-02 00:00:00','g','g'), (16,4,'1900-01-01 00:00:00','p','p'),
 
10318
(17,1,'2002-12-08 11:34:58','q','q'), (18,9,'1900-01-01 00:00:00','w','w'),
 
10319
(19,4,'1900-01-01 00:00:00','d','d'), (20,8,'2002-08-25 20:35:06','e','e');
 
10320
SELECT alias1.col_datetime_key
 
10321
FROM t2 AS alias1
 
10322
RIGHT JOIN t2 AS alias2
 
10323
JOIN t2 AS alias3
 
10324
ON alias3.pk = alias2.pk
 
10325
ON alias3.col_varchar_nokey = alias2.col_varchar_key OR
 
10326
alias2.col_varchar_nokey
 
10327
WHERE (alias2.col_varchar_key, alias2.col_varchar_key) IN
 
10328
(SELECT sq2_alias2.col_varchar_key, sq2_alias1.col_varchar_nokey
 
10329
FROM t1 AS sq2_alias1, t1 AS sq2_alias2
 
10330
WHERE sq2_alias2.col_int_key < 2);
 
10331
col_datetime_key
 
10332
1900-01-01 00:00:00
 
10333
1900-01-01 00:00:00
 
10334
1900-01-01 00:00:00
 
10335
1900-01-01 00:00:00
 
10336
1900-01-01 00:00:00
 
10337
2001-01-20 12:47:23
 
10338
2001-02-15 03:08:38
 
10339
2002-01-16 00:00:00
 
10340
2002-02-13 17:30:06
 
10341
2002-08-20 22:48:00
 
10342
2002-08-25 20:35:06
 
10343
2002-12-08 11:34:58
 
10344
2004-10-02 20:31:15
 
10345
2005-08-15 00:00:00
 
10346
2006-10-12 04:32:53
 
10347
2007-05-28 00:00:00
 
10348
2008-05-16 08:09:06
 
10349
2008-07-02 00:00:00
 
10350
2008-09-27 00:34:58
 
10351
2009-07-25 09:21:20
 
10352
1900-01-01 00:00:00
 
10353
1900-01-01 00:00:00
 
10354
1900-01-01 00:00:00
 
10355
1900-01-01 00:00:00
 
10356
1900-01-01 00:00:00
 
10357
2001-01-20 12:47:23
 
10358
2001-02-15 03:08:38
 
10359
2002-01-16 00:00:00
 
10360
2002-02-13 17:30:06
 
10361
2002-08-20 22:48:00
 
10362
2002-08-25 20:35:06
 
10363
2002-12-08 11:34:58
 
10364
2004-10-02 20:31:15
 
10365
2005-08-15 00:00:00
 
10366
2006-10-12 04:32:53
 
10367
2007-05-28 00:00:00
 
10368
2008-05-16 08:09:06
 
10369
2008-07-02 00:00:00
 
10370
2008-09-27 00:34:58
 
10371
2009-07-25 09:21:20
 
10372
ALTER TABLE t1 DISABLE KEYS;
 
10373
ALTER TABLE t2 DISABLE KEYS;
 
10374
explain format=json SELECT alias1.col_datetime_key
 
10375
FROM t2 AS alias1
 
10376
RIGHT JOIN t2 AS alias2
 
10377
JOIN t2 AS alias3
 
10378
ON alias3.pk = alias2.pk
 
10379
ON alias3.col_varchar_nokey = alias2.col_varchar_key OR
 
10380
alias2.col_varchar_nokey
 
10381
WHERE (alias2.col_varchar_key, alias2.col_varchar_key) IN
 
10382
(SELECT sq2_alias2.col_varchar_key, sq2_alias1.col_varchar_nokey
 
10383
FROM t1 AS sq2_alias1, t1 AS sq2_alias2
 
10384
WHERE sq2_alias2.col_int_key < 2);
 
10385
EXPLAIN
 
10386
{
 
10387
  "query_block": {
 
10388
    "select_id": 1,
 
10389
    "nested_loop": [
 
10390
      {
 
10391
        "table": {
 
10392
          "table_name": "<subquery2>",
 
10393
          "access_type": "ALL",
 
10394
          "attached_condition": "(`<subquery2>`.`col_varchar_nokey` = `<subquery2>`.`col_varchar_key`)",
 
10395
          "materialized_from_subquery": {
 
10396
            "using_temporary_table": true,
 
10397
            "query_block": {
 
10398
              "nested_loop": [
 
10399
                {
 
10400
                  "table": {
 
10401
                    "table_name": "sq2_alias1",
 
10402
                    "access_type": "ALL",
 
10403
                    "rows": 20,
 
10404
                    "filtered": 100
 
10405
                  }
 
10406
                },
 
10407
                {
 
10408
                  "table": {
 
10409
                    "table_name": "sq2_alias2",
 
10410
                    "access_type": "ALL",
 
10411
                    "rows": 20,
 
10412
                    "filtered": 100,
 
10413
                    "attached_condition": "((`test`.`sq2_alias2`.`col_varchar_key` = `test`.`sq2_alias1`.`col_varchar_nokey`) and (`test`.`sq2_alias2`.`col_int_key` < 2))"
 
10414
                  }
 
10415
                }
 
10416
              ]
 
10417
            }
 
10418
          }
 
10419
        }
 
10420
      },
 
10421
      {
 
10422
        "table": {
 
10423
          "table_name": "alias2",
 
10424
          "access_type": "ALL",
 
10425
          "possible_keys": [
 
10426
            "PRIMARY"
 
10427
          ],
 
10428
          "rows": 20,
 
10429
          "filtered": 100,
 
10430
          "attached_condition": "(`test`.`alias2`.`col_varchar_key` = `<subquery2>`.`col_varchar_key`)"
 
10431
        }
 
10432
      },
 
10433
      {
 
10434
        "table": {
 
10435
          "table_name": "alias3",
 
10436
          "access_type": "eq_ref",
 
10437
          "possible_keys": [
 
10438
            "PRIMARY"
 
10439
          ],
 
10440
          "key": "PRIMARY",
 
10441
          "used_key_parts": [
 
10442
            "pk"
 
10443
          ],
 
10444
          "key_length": "4",
 
10445
          "ref": [
 
10446
            "test.alias2.pk"
 
10447
          ],
 
10448
          "rows": 1,
 
10449
          "filtered": 100,
 
10450
          "using_join_buffer": "Batched Key Access"
 
10451
        }
 
10452
      },
 
10453
      {
 
10454
        "table": {
 
10455
          "table_name": "alias1",
 
10456
          "access_type": "ALL",
 
10457
          "rows": 20,
 
10458
          "filtered": 100,
 
10459
          "attached_condition": "<if>(is_not_null_compl(alias1), ((`test`.`alias3`.`col_varchar_nokey` = `test`.`alias2`.`col_varchar_key`) or `test`.`alias2`.`col_varchar_nokey`), true)"
 
10460
        }
 
10461
      }
 
10462
    ]
 
10463
  }
 
10464
}
 
10465
Warnings:
 
10466
Note    1003    /* select#1 */ select `test`.`alias1`.`col_datetime_key` AS `col_datetime_key` from `test`.`t2` `alias2` semi join (`test`.`t1` `sq2_alias1` join `test`.`t1` `sq2_alias2`) join `test`.`t2` `alias3` left join `test`.`t2` `alias1` on((((`test`.`alias3`.`col_varchar_nokey` = `test`.`alias2`.`col_varchar_key`) and (`test`.`sq2_alias2`.`col_varchar_key` = `test`.`sq2_alias1`.`col_varchar_nokey`)) or `test`.`alias2`.`col_varchar_nokey`)) where ((`test`.`alias3`.`pk` = `test`.`alias2`.`pk`) and (`<subquery2>`.`col_varchar_nokey` = `<subquery2>`.`col_varchar_key`) and (`test`.`alias2`.`col_varchar_key` = `<subquery2>`.`col_varchar_key`) and (`test`.`sq2_alias2`.`col_varchar_key` = `test`.`sq2_alias1`.`col_varchar_nokey`) and (`test`.`sq2_alias2`.`col_int_key` < 2))
 
10467
SELECT alias1.col_datetime_key
 
10468
FROM t2 AS alias1
 
10469
RIGHT JOIN t2 AS alias2
 
10470
JOIN t2 AS alias3
 
10471
ON alias3.pk = alias2.pk
 
10472
ON alias3.col_varchar_nokey = alias2.col_varchar_key OR
 
10473
alias2.col_varchar_nokey
 
10474
WHERE (alias2.col_varchar_key, alias2.col_varchar_key) IN
 
10475
(SELECT sq2_alias2.col_varchar_key, sq2_alias1.col_varchar_nokey
 
10476
FROM t1 AS sq2_alias1, t1 AS sq2_alias2
 
10477
WHERE sq2_alias2.col_int_key < 2);
 
10478
col_datetime_key
 
10479
2002-02-13 17:30:06
 
10480
2008-09-27 00:34:58
 
10481
2007-05-28 00:00:00
 
10482
2009-07-25 09:21:20
 
10483
2002-01-16 00:00:00
 
10484
2006-10-12 04:32:53
 
10485
2001-02-15 03:08:38
 
10486
2004-10-02 20:31:15
 
10487
2002-08-20 22:48:00
 
10488
1900-01-01 00:00:00
 
10489
2005-08-15 00:00:00
 
10490
1900-01-01 00:00:00
 
10491
2008-05-16 08:09:06
 
10492
2001-01-20 12:47:23
 
10493
2008-07-02 00:00:00
 
10494
1900-01-01 00:00:00
 
10495
2002-12-08 11:34:58
 
10496
1900-01-01 00:00:00
 
10497
1900-01-01 00:00:00
 
10498
2002-08-25 20:35:06
 
10499
2002-02-13 17:30:06
 
10500
2008-09-27 00:34:58
 
10501
2007-05-28 00:00:00
 
10502
2009-07-25 09:21:20
 
10503
2002-01-16 00:00:00
 
10504
2006-10-12 04:32:53
 
10505
2001-02-15 03:08:38
 
10506
2004-10-02 20:31:15
 
10507
2002-08-20 22:48:00
 
10508
1900-01-01 00:00:00
 
10509
2005-08-15 00:00:00
 
10510
1900-01-01 00:00:00
 
10511
2008-05-16 08:09:06
 
10512
2001-01-20 12:47:23
 
10513
2008-07-02 00:00:00
 
10514
1900-01-01 00:00:00
 
10515
2002-12-08 11:34:58
 
10516
1900-01-01 00:00:00
 
10517
1900-01-01 00:00:00
 
10518
2002-08-25 20:35:06
 
10519
DROP TABLE t1, t2;
 
10520
# End of test for bug#14064201.
 
10521
set @@optimizer_switch=@old_opt_switch;
 
10522
# End of 5.6 tests
 
10523
set optimizer_switch=default;
 
10524
set optimizer_switch=default;