~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/r/pbxt/subselect_mat.result

  • Committer: Monty Taylor
  • Date: 2008-10-09 22:38:27 UTC
  • mto: This revision was merged to the branch mainline in revision 497.
  • Revision ID: monty@inaugust.com-20081009223827-bc9gvpiplsmvpwyq
Moved test() to its own file.
Made a new function to possibly replace int10_to_str.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
drop table if exists t1, t2, t3, t1i, t2i, t3i;
2
 
create table t1 (a1 char(8), a2 char(8));
3
 
create temporary table t2 (b1 char(8), b2 char(8)) ENGINE=MyISAM;
4
 
create table t3 (c1 char(8), c2 char(8));
5
 
insert into t1 values ('1 - 00', '2 - 00');
6
 
insert into t1 values ('1 - 01', '2 - 01');
7
 
insert into t1 values ('1 - 02', '2 - 02');
8
 
insert into t2 values ('1 - 01', '2 - 01');
9
 
insert into t2 values ('1 - 01', '2 - 01');
10
 
insert into t2 values ('1 - 02', '2 - 02');
11
 
insert into t2 values ('1 - 02', '2 - 02');
12
 
insert into t2 values ('1 - 03', '2 - 03');
13
 
insert into t3 values ('1 - 01', '2 - 01');
14
 
insert into t3 values ('1 - 02', '2 - 02');
15
 
insert into t3 values ('1 - 03', '2 - 03');
16
 
insert into t3 values ('1 - 04', '2 - 04');
17
 
create temporary table t1i (a1 char(8), a2 char(8)) ENGINE=MyISAM;
18
 
create table t2i (b1 char(8), b2 char(8));
19
 
create temporary table t3i (c1 char(8), c2 char(8)) ENGINE=MyISAM;
20
 
create index it1i1 on t1i (a1);
21
 
create index it1i2 on t1i (a2);
22
 
create index it1i3 on t1i (a1, a2);
23
 
create index it2i1 on t2i (b1);
24
 
create index it2i2 on t2i (b2);
25
 
create index it2i3 on t2i (b1, b2);
26
 
create index it3i1 on t3i (c1);
27
 
create index it3i2 on t3i (c2);
28
 
create index it3i3 on t3i (c1, c2);
29
 
insert into t1i select * from t1;
30
 
insert into t2i select * from t2;
31
 
insert into t3i select * from t3;
32
 
/********************************************************************
33
 
* Simple tests.
34
 
********************************************************************/
35
 
# non-indexed nullable fields
36
 
explain extended
37
 
select * from t1 where a1 in (select b1 from t2 where b1 > '0');
38
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
39
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
40
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
41
 
Warnings:
42
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a1`,`test`.`t1`.`a1` in ( <materialize> (select `test`.`t2`.`b1` AS `b1` from `test`.`t2` where (`test`.`t2`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key)))
43
 
select * from t1 where a1 in (select b1 from t2 where b1 > '0');
44
 
a1      a2
45
 
1 - 01  2 - 01
46
 
1 - 02  2 - 02
47
 
explain extended
48
 
select * from t1 where a1 in (select b1 from t2 where b1 > '0' group by b1);
49
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
50
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
51
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where; Using temporary; Using filesort
52
 
Warnings:
53
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a1`,`test`.`t1`.`a1` in ( <materialize> (select `test`.`t2`.`b1` AS `b1` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key)))
54
 
select * from t1 where a1 in (select b1 from t2 where b1 > '0' group by b1);
55
 
a1      a2
56
 
1 - 01  2 - 01
57
 
1 - 02  2 - 02
58
 
explain extended
59
 
select * from t1 where (a1, a2) in (select b1, b2 from t2 where b1 > '0' group by b1, b2);
60
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
61
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
62
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where; Using temporary; Using filesort
63
 
Warnings:
64
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1`,`test`.`t2`.`b2` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key)))
65
 
select * from t1 where (a1, a2) in (select b1, b2 from t2 where b1 > '0' group by b1, b2);
66
 
a1      a2
67
 
1 - 01  2 - 01
68
 
1 - 02  2 - 02
69
 
explain extended
70
 
select * from t1 where (a1, a2) in (select b1, min(b2) from t2 where b1 > '0' group by b1);
71
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
72
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
73
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where; Using temporary; Using filesort
74
 
Warnings:
75
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,min(`test`.`t2`.`b2`) AS `min(b2)` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key)))
76
 
select * from t1 where (a1, a2) in (select b1, min(b2) from t2 where b1 > '0' group by b1);
77
 
a1      a2
78
 
1 - 01  2 - 01
79
 
1 - 02  2 - 02
80
 
explain extended
81
 
select * from t1i where a1 in (select b1 from t2i where b1 > '0');
82
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
83
 
1       PRIMARY t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
84
 
2       SUBQUERY        t2i     ALL     it2i1,it2i3     NULL    NULL    NULL    #       100.00  Using where
85
 
Warnings:
86
 
Note    1003    select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>(`test`.`t1i`.`a1`,`test`.`t1i`.`a1` in ( <materialize> (select `test`.`t2i`.`b1` AS `b1` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key)))
87
 
select * from t1i where a1 in (select b1 from t2i where b1 > '0');
88
 
a1      a2
89
 
1 - 01  2 - 01
90
 
1 - 02  2 - 02
91
 
explain extended
92
 
select * from t1i where a1 in (select b1 from t2i where b1 > '0' group by b1);
93
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
94
 
1       PRIMARY t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
95
 
2       SUBQUERY        t2i     ALL     it2i1,it2i3     NULL    NULL    NULL    #       100.00  Using where; Using temporary; Using filesort
96
 
Warnings:
97
 
Note    1003    select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>(`test`.`t1i`.`a1`,`test`.`t1i`.`a1` in ( <materialize> (select `test`.`t2i`.`b1` AS `b1` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key)))
98
 
select * from t1i where a1 in (select b1 from t2i where b1 > '0' group by b1);
99
 
a1      a2
100
 
1 - 01  2 - 01
101
 
1 - 02  2 - 02
102
 
explain extended
103
 
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0');
104
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
105
 
1       PRIMARY t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
106
 
2       SUBQUERY        t2i     ALL     it2i1,it2i3     NULL    NULL    NULL    #       100.00  Using where
107
 
Warnings:
108
 
Note    1003    select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key)))
109
 
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0');
110
 
a1      a2
111
 
1 - 01  2 - 01
112
 
1 - 02  2 - 02
113
 
explain extended
114
 
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0' group by b1, b2);
115
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
116
 
1       PRIMARY t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
117
 
2       SUBQUERY        t2i     ALL     it2i1,it2i3     NULL    NULL    NULL    #       100.00  Using where; Using temporary; Using filesort
118
 
Warnings:
119
 
Note    1003    select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`,`test`.`t2i`.`b2` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key)))
120
 
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0' group by b1, b2);
121
 
a1      a2
122
 
1 - 01  2 - 01
123
 
1 - 02  2 - 02
124
 
explain extended
125
 
select * from t1i where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
126
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
127
 
1       PRIMARY t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
128
 
2       SUBQUERY        t2i     ALL     it2i1,it2i3     NULL    NULL    NULL    #       100.00  Using where; Using temporary; Using filesort
129
 
Warnings:
130
 
Note    1003    select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,min(`test`.`t2i`.`b2`) AS `min(b2)` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key)))
131
 
select * from t1i where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
132
 
a1      a2
133
 
1 - 01  2 - 01
134
 
1 - 02  2 - 02
135
 
explain extended
136
 
select * from t1 where (a1, a2) in (select b1, b2 from t2 order by b1, b2);
137
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
138
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
139
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  
140
 
Warnings:
141
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` order by `test`.`t2`.`b1`,`test`.`t2`.`b2` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key)))
142
 
select * from t1 where (a1, a2) in (select b1, b2 from t2 order by b1, b2);
143
 
a1      a2
144
 
1 - 01  2 - 01
145
 
1 - 02  2 - 02
146
 
explain extended
147
 
select * from t1i where (a1, a2) in (select b1, b2 from t2i order by b1, b2);
148
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
149
 
1       PRIMARY t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
150
 
2       SUBQUERY        t2i     ALL     NULL    NULL    NULL    NULL    #       100.00  
151
 
Warnings:
152
 
Note    1003    select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` order by `test`.`t2i`.`b1`,`test`.`t2i`.`b2` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key)))
153
 
select * from t1i where (a1, a2) in (select b1, b2 from t2i order by b1, b2);
154
 
a1      a2
155
 
1 - 01  2 - 01
156
 
1 - 02  2 - 02
157
 
explain extended
158
 
select * from t1
159
 
where (a1, a2) in (select b1, b2 from t2 where b1 >  '0') and
160
 
(a1, a2) in (select c1, c2 from t3
161
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
162
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
163
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
164
 
3       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
165
 
4       SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
166
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
167
 
Warnings:
168
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (`test`.`t2`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))))
169
 
select * from t1
170
 
where (a1, a2) in (select b1, b2 from t2 where b1 >  '0') and
171
 
(a1, a2) in (select c1, c2 from t3
172
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
173
 
a1      a2
174
 
1 - 01  2 - 01
175
 
1 - 02  2 - 02
176
 
explain extended
177
 
select * from t1i
178
 
where (a1, a2) in (select b1, b2 from t2i where b1 >  '0') and
179
 
(a1, a2) in (select c1, c2 from t3i
180
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
181
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
182
 
1       PRIMARY t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
183
 
3       SUBQUERY        t3i     index   NULL    it3i3   70      NULL    #       100.00  Using where; Using index
184
 
4       SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
185
 
2       SUBQUERY        t2i     ALL     it2i1,it2i3     NULL    NULL    NULL    #       100.00  Using where
186
 
Warnings:
187
 
Note    1003    select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where (<in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key))) and <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t3i`.`c1` AS `c1`,`test`.`t3i`.`c2` AS `c2` from `test`.`t3i` where <in_optimizer>((`test`.`t3i`.`c1`,`test`.`t3i`.`c2`),(`test`.`t3i`.`c1`,`test`.`t3i`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3i`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key))))
188
 
select * from t1i
189
 
where (a1, a2) in (select b1, b2 from t2i where b1 >  '0') and
190
 
(a1, a2) in (select c1, c2 from t3i
191
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
192
 
a1      a2
193
 
1 - 01  2 - 01
194
 
1 - 02  2 - 02
195
 
explain extended
196
 
select * from t1
197
 
where (a1, a2) in (select b1, b2 from t2
198
 
where b2 in (select c2 from t3 where c2 LIKE '%02') or
199
 
b2 in (select c2 from t3 where c2 LIKE '%03')) and
200
 
(a1, a2) in (select c1, c2 from t3
201
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
202
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
203
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
204
 
5       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
205
 
6       SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
206
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
207
 
4       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
208
 
3       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
209
 
Warnings:
210
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%02') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key)))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))))
211
 
select * from t1
212
 
where (a1, a2) in (select b1, b2 from t2
213
 
where b2 in (select c2 from t3 where c2 LIKE '%02') or
214
 
b2 in (select c2 from t3 where c2 LIKE '%03')) and
215
 
(a1, a2) in (select c1, c2 from t3
216
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
217
 
a1      a2
218
 
1 - 02  2 - 02
219
 
explain extended
220
 
select * from t1
221
 
where (a1, a2) in (select b1, b2 from t2
222
 
where b2 in (select c2 from t3 t3a where c1 = a1) or
223
 
b2 in (select c2 from t3 t3b where c2 LIKE '%03')) and
224
 
(a1, a2) in (select c1, c2 from t3 t3c
225
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
226
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
227
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
228
 
5       SUBQUERY        t3c     ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
229
 
6       SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
230
 
2       DEPENDENT SUBQUERY      t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
231
 
4       SUBQUERY        t3b     ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
232
 
3       DEPENDENT SUBQUERY      t3a     ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
233
 
Warnings:
234
 
Note    1276    Field or reference 'test.t1.a1' of SELECT #3 was resolved in SELECT #1
235
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((<in_optimizer>(`test`.`t2`.`b2`,<exists>(select 1 AS `Not_used` from `test`.`t3` `t3a` where ((`test`.`t3a`.`c1` = `test`.`t1`.`a1`) and (<cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`)))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3b`.`c2` AS `c2` from `test`.`t3` `t3b` where (`test`.`t3b`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key)))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3c`.`c1` AS `c1`,`test`.`t3c`.`c2` AS `c2` from `test`.`t3` `t3c` where <in_optimizer>((`test`.`t3c`.`c1`,`test`.`t3c`.`c2`),(`test`.`t3c`.`c1`,`test`.`t3c`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3c`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))))
236
 
select * from t1
237
 
where (a1, a2) in (select b1, b2 from t2
238
 
where b2 in (select c2 from t3 t3a where c1 = a1) or
239
 
b2 in (select c2 from t3 t3b where c2 LIKE '%03')) and
240
 
(a1, a2) in (select c1, c2 from t3 t3c
241
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
242
 
a1      a2
243
 
1 - 01  2 - 01
244
 
1 - 02  2 - 02
245
 
explain extended
246
 
(select * from t1
247
 
where (a1, a2) in (select b1, b2 from t2
248
 
where b2 in (select c2 from t3 where c2 LIKE '%02') or
249
 
b2 in (select c2 from t3 where c2 LIKE '%03')
250
 
group by b1, b2) and
251
 
(a1, a2) in (select c1, c2 from t3
252
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')))
253
 
UNION
254
 
(select * from t1i
255
 
where (a1, a2) in (select b1, b2 from t2i where b1 >  '0') and
256
 
(a1, a2) in (select c1, c2 from t3i
257
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')));
258
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
259
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
260
 
5       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
261
 
6       SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
262
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where; Using temporary; Using filesort
263
 
4       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
264
 
3       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
265
 
7       UNION   t1i     index   NULL    it1i3   70      NULL    #       100.00  Using where; Using index
266
 
9       SUBQUERY        t3i     index   NULL    it3i3   70      NULL    #       100.00  Using where; Using index
267
 
10      SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
268
 
8       SUBQUERY        t2i     ALL     it2i1,it2i3     NULL    NULL    NULL    #       100.00  Using where
269
 
NULL    UNION RESULT    <union1,7>      ALL     NULL    NULL    NULL    NULL    #       NULL    
270
 
Warnings:
271
 
Note    1003    (select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%02') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key)))) group by `test`.`t2`.`b1`,`test`.`t2`.`b2` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))))) union (select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where (<in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key))) and <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t3i`.`c1` AS `c1`,`test`.`t3i`.`c2` AS `c2` from `test`.`t3i` where <in_optimizer>((`test`.`t3i`.`c1`,`test`.`t3i`.`c2`),(`test`.`t3i`.`c1`,`test`.`t3i`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3i`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key)))))
272
 
(select * from t1
273
 
where (a1, a2) in (select b1, b2 from t2
274
 
where b2 in (select c2 from t3 where c2 LIKE '%02') or
275
 
b2 in (select c2 from t3 where c2 LIKE '%03')
276
 
group by b1, b2) and
277
 
(a1, a2) in (select c1, c2 from t3
278
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')))
279
 
UNION
280
 
(select * from t1i
281
 
where (a1, a2) in (select b1, b2 from t2i where b1 >  '0') and
282
 
(a1, a2) in (select c1, c2 from t3i
283
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')));
284
 
a1      a2
285
 
1 - 02  2 - 02
286
 
1 - 01  2 - 01
287
 
explain extended
288
 
select * from t1
289
 
where (a1, a2) in (select * from t1 where a1 > '0' UNION select * from t2 where b1 < '9') and
290
 
(a1, a2) in (select c1, c2 from t3
291
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
292
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
293
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
294
 
4       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
295
 
5       SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
296
 
2       DEPENDENT SUBQUERY      t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
297
 
3       DEPENDENT UNION t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
298
 
NULL    UNION RESULT    <union2,3>      ALL     NULL    NULL    NULL    NULL    #       NULL    
299
 
Warnings:
300
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where ((`test`.`t1`.`a1` > '0') and (<cache>(`test`.`t1`.`a1`) = `test`.`t1`.`a1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t1`.`a2`)) union select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((`test`.`t2`.`b1` < '9') and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key))))
301
 
select * from t1
302
 
where (a1, a2) in (select * from t1 where a1 > '0' UNION select * from t2 where b1 < '9') and
303
 
(a1, a2) in (select c1, c2 from t3
304
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
305
 
a1      a2
306
 
1 - 01  2 - 01
307
 
1 - 02  2 - 02
308
 
explain extended
309
 
select * from t1, t3
310
 
where (a1, a2) in (select * from t1 where a1 > '0' UNION select * from t2 where b1 < '9') and
311
 
(c1, c2) in (select c1, c2 from t3
312
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')) and
313
 
a1 = c1;
314
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
315
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
316
 
1       PRIMARY t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where; Using join buffer
317
 
4       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
318
 
5       SUBQUERY        t2i     ALL     it2i2   NULL    NULL    NULL    #       100.00  Using where
319
 
2       DEPENDENT SUBQUERY      t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
320
 
3       DEPENDENT UNION t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
321
 
NULL    UNION RESULT    <union2,3>      ALL     NULL    NULL    NULL    NULL    #       NULL    
322
 
Warnings:
323
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`c1` = `test`.`t1`.`a1`) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where ((`test`.`t1`.`a1` > '0') and (<cache>(`test`.`t1`.`a1`) = `test`.`t1`.`a1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t1`.`a2`)) union select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((`test`.`t2`.`b1` < '9') and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key))) ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key))))
324
 
select * from t1, t3
325
 
where (a1, a2) in (select * from t1 where a1 > '0' UNION select * from t2 where b1 < '9') and
326
 
(c1, c2) in (select c1, c2 from t3
327
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')) and
328
 
a1 = c1;
329
 
a1      a2      c1      c2
330
 
1 - 01  2 - 01  1 - 01  2 - 01
331
 
1 - 02  2 - 02  1 - 02  2 - 02
332
 
/*********************************************************************
333
 
* Negative tests, where materialization should not be applied.
334
 
**********************************************************************/
335
 
# UNION in a subquery
336
 
explain extended
337
 
select * from t3
338
 
where c1 in (select a1 from t1 where a1 > '0' UNION select b1 from t2 where b1 < '9');
339
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
340
 
1       PRIMARY t3      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
341
 
2       DEPENDENT SUBQUERY      t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
342
 
3       DEPENDENT UNION t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
343
 
NULL    UNION RESULT    <union2,3>      ALL     NULL    NULL    NULL    NULL    #       NULL    
344
 
Warnings:
345
 
Note    1003    select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>(`test`.`t3`.`c1`,<exists>(select 1 AS `Not_used` from `test`.`t1` where ((`test`.`t1`.`a1` > '0') and (<cache>(`test`.`t3`.`c1`) = `test`.`t1`.`a1`)) union select 1 AS `Not_used` from `test`.`t2` where ((`test`.`t2`.`b1` < '9') and (<cache>(`test`.`t3`.`c1`) = `test`.`t2`.`b1`))))
346
 
select * from t3
347
 
where c1 in (select a1 from t1 where a1 > '0' UNION select b1 from t2 where b1 < '9');
348
 
c1      c2
349
 
1 - 01  2 - 01
350
 
1 - 02  2 - 02
351
 
1 - 03  2 - 03
352
 
explain extended
353
 
select * from t1
354
 
where (a1, a2) in (select b1, b2 from t2
355
 
where b2 in (select c2 from t3 t3a where c1 = a1) or
356
 
b2 in (select c2 from t3 t3b where c2 LIKE '%03')) and
357
 
(a1, a2) in (select c1, c2 from t3 t3c
358
 
where (c1, c2) in (select b1, b2 from t2i where b2 > '0' or b2 = a2));
359
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
360
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
361
 
5       DEPENDENT SUBQUERY      t3c     ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
362
 
6       DEPENDENT SUBQUERY      t2i     index_subquery  it2i1,it2i2,it2i3       it2i1   35      func    #       100.00  Using where
363
 
2       DEPENDENT SUBQUERY      t2      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
364
 
4       SUBQUERY        t3b     ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
365
 
3       DEPENDENT SUBQUERY      t3a     ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
366
 
Warnings:
367
 
Note    1276    Field or reference 'test.t1.a1' of SELECT #3 was resolved in SELECT #1
368
 
Note    1276    Field or reference 'test.t1.a2' of SELECT #6 was resolved in SELECT #1
369
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((<in_optimizer>(`test`.`t2`.`b2`,<exists>(select 1 AS `Not_used` from `test`.`t3` `t3a` where ((`test`.`t3a`.`c1` = `test`.`t1`.`a1`) and (<cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`)))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3b`.`c2` AS `c2` from `test`.`t3` `t3b` where (`test`.`t3b`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key)))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t3c`.`c1` AS `c1`,`test`.`t3c`.`c2` AS `c2` from `test`.`t3` `t3c` where (<in_optimizer>((`test`.`t3c`.`c1`,`test`.`t3c`.`c2`),<exists>(<index_lookup>(<cache>(`test`.`t3c`.`c1`) in t2i on it2i1 where (((`test`.`t2i`.`b2` > '0') or (`test`.`t2i`.`b2` = `test`.`t1`.`a2`)) and (<cache>(`test`.`t3c`.`c1`) = `test`.`t2i`.`b1`) and (<cache>(`test`.`t3c`.`c2`) = `test`.`t2i`.`b2`))))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t3c`.`c1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t3c`.`c2`)))))
370
 
DROP TABLE t1i, t2i, t3i;
371
 
explain extended
372
 
select * from t1 where (a1, a2) in (select '1 - 01', '2 - 01');
373
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
374
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using where
375
 
2       DEPENDENT SUBQUERY      NULL    NULL    NULL    NULL    NULL    NULL    #       NULL    No tables used
376
 
Warnings:
377
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select '1 - 01' AS `1 - 01`,'2 - 01' AS `2 - 01` having ((<cache>(`test`.`t1`.`a1`) = '1 - 01') and (<cache>(`test`.`t1`.`a2`) = '2 - 01'))))
378
 
select * from t1 where (a1, a2) in (select '1 - 01', '2 - 01');
379
 
a1      a2
380
 
1 - 01  2 - 01
381
 
/******************************************************************************
382
 
* Subqueries in other uncovered clauses.
383
 
******************************************************************************/
384
 
/* SELECT clause */
385
 
select ((a1,a2) IN (select * from t2 where b2 > '0')) IS NULL from t1;
386
 
((a1,a2) IN (select * from t2 where b2 > '0')) IS NULL 
387
 
0
388
 
0
389
 
0
390
 
/* GROUP BY clause */
391
 
create temporary table columns (col int key) ENGINE=MyISAM;
392
 
insert into columns values (1), (2);
393
 
explain extended
394
 
select * from t1 group by (select col from columns limit 1);
395
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
396
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  
397
 
2       SUBQUERY        columns index   NULL    PRIMARY 4       NULL    #       100.00  Using index
398
 
Warnings:
399
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` group by (select `test`.`columns`.`col` AS `col` from `test`.`columns` limit 1)
400
 
select * from t1 group by (select col from columns limit 1);
401
 
a1      a2
402
 
1 - 00  2 - 00
403
 
explain extended
404
 
select * from t1 group by (a1 in (select col from columns));
405
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
406
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  Using temporary; Using filesort
407
 
2       DEPENDENT SUBQUERY      columns unique_subquery PRIMARY PRIMARY 4       func    #       100.00  Using index; Using where; Full scan on NULL key
408
 
Warnings:
409
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` group by <in_optimizer>(`test`.`t1`.`a1`,<exists>(<primary_index_lookup>(<cache>(`test`.`t1`.`a1`) in columns on PRIMARY where trigcond((<cache>(`test`.`t1`.`a1`) = `test`.`columns`.`col`)))))
410
 
select * from t1 group by (a1 in (select col from columns));
411
 
a1      a2
412
 
1 - 00  2 - 00
413
 
/* ORDER BY clause */
414
 
explain extended
415
 
select * from t1 order by (select col from columns limit 1);
416
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
417
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    #       100.00  
418
 
2       SUBQUERY        columns index   NULL    PRIMARY 4       NULL    #       100.00  Using index
419
 
Warnings:
420
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` order by (select `test`.`columns`.`col` AS `col` from `test`.`columns` limit 1)
421
 
select * from t1 order by (select col from columns limit 1);
422
 
a1      a2
423
 
1 - 00  2 - 00
424
 
1 - 01  2 - 01
425
 
1 - 02  2 - 02
426
 
DROP TABLE columns;
427
 
/******************************************************************************
428
 
* Column types/sizes that affect materialization.
429
 
******************************************************************************/
430
 
/*
431
 
Test that BLOBs are not materialized (except when arguments of some functions).
432
 
*/
433
 
# force materialization to be always considered
434
 
set @prefix_len = 6;
435
 
set @blob_len = 16;
436
 
set @suffix_len = @blob_len - @prefix_len;
437
 
create temporary table t1_16 (a1 blob, a2 blob) ENGINE=MyISAM;
438
 
create temporary table t2_16 (b1 blob, b2 blob) ENGINE=MyISAM;
439
 
create temporary table t3_16 (c1 blob, c2 blob) ENGINE=MyISAM;
440
 
insert into t1_16 values
441
 
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
442
 
insert into t1_16 values
443
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
444
 
insert into t1_16 values
445
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
446
 
insert into t2_16 values
447
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
448
 
insert into t2_16 values
449
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
450
 
insert into t2_16 values
451
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
452
 
insert into t3_16 values
453
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
454
 
insert into t3_16 values
455
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
456
 
insert into t3_16 values
457
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
458
 
insert into t3_16 values
459
 
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
460
 
explain extended select left(a1,7), left(a2,7)
461
 
from t1_16
462
 
where a1 in (select b1 from t2_16 where b1 > '0');
463
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
464
 
1       PRIMARY t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
465
 
2       DEPENDENT SUBQUERY      t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
466
 
Warnings:
467
 
Note    1003    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 (select 1 AS `Not_used` from `test`.`t2_16` where ((`test`.`t2_16`.`b1` > '0') and (<cache>(`test`.`t1_16`.`a1`) = `test`.`t2_16`.`b1`))))
468
 
select left(a1,7), left(a2,7)
469
 
from t1_16
470
 
where a1 in (select b1 from t2_16 where b1 > '0');
471
 
left(a1,7)      left(a2,7)
472
 
1 - 01x 2 - 01x
473
 
1 - 02x 2 - 02x
474
 
explain extended select left(a1,7), left(a2,7)
475
 
from t1_16
476
 
where (a1,a2) in (select b1, b2 from t2_16 where b1 > '0');
477
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
478
 
1       PRIMARY t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
479
 
2       DEPENDENT SUBQUERY      t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
480
 
Warnings:
481
 
Note    1003    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`.`a2`),(`test`.`t1_16`.`a1`,`test`.`t1_16`.`a2`) in (select `test`.`t2_16`.`b1` AS `b1`,`test`.`t2_16`.`b2` AS `b2` from `test`.`t2_16` where ((`test`.`t2_16`.`b1` > '0') and (<cache>(`test`.`t1_16`.`a1`) = `test`.`t2_16`.`b1`) and (<cache>(`test`.`t1_16`.`a2`) = `test`.`t2_16`.`b2`))))
482
 
select left(a1,7), left(a2,7)
483
 
from t1_16
484
 
where (a1,a2) in (select b1, b2 from t2_16 where b1 > '0');
485
 
left(a1,7)      left(a2,7)
486
 
1 - 01x 2 - 01x
487
 
1 - 02x 2 - 02x
488
 
explain extended select left(a1,7), left(a2,7)
489
 
from t1_16
490
 
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
491
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
492
 
1       PRIMARY t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
493
 
2       SUBQUERY        t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
494
 
Warnings:
495
 
Note    1003    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 substr(`test`.`t2_16`.`b1`,1,16) AS `substring(b1,1,16)` from `test`.`t2_16` where (`test`.`t2_16`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1_16`.`a1` in <temporary table> on distinct_key)))
496
 
select left(a1,7), left(a2,7)
497
 
from t1_16
498
 
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
499
 
left(a1,7)      left(a2,7)
500
 
1 - 01x 2 - 01x
501
 
1 - 02x 2 - 02x
502
 
explain extended select left(a1,7), left(a2,7)
503
 
from t1_16
504
 
where a1 in (select group_concat(b1) from t2_16 group by b2);
505
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
506
 
1       PRIMARY t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
507
 
2       DEPENDENT SUBQUERY      t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
508
 
Warnings:
509
 
Note    1003    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 (select group_concat(`test`.`t2_16`.`b1` separator ',') AS `group_concat(b1)` 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 ',')))))
510
 
select left(a1,7), left(a2,7)
511
 
from t1_16
512
 
where a1 in (select group_concat(b1) from t2_16 group by b2);
513
 
left(a1,7)      left(a2,7)
514
 
1 - 01x 2 - 01x
515
 
1 - 02x 2 - 02x
516
 
set @@group_concat_max_len = 256;
517
 
explain extended select left(a1,7), left(a2,7)
518
 
from t1_16
519
 
where a1 in (select group_concat(b1) from t2_16 group by b2);
520
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
521
 
1       PRIMARY t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
522
 
2       SUBQUERY        t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
523
 
Warnings:
524
 
Note    1003    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 group_concat(`test`.`t2_16`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_16` group by `test`.`t2_16`.`b2` ), <primary_index_lookup>(`test`.`t1_16`.`a1` in <temporary table> on distinct_key)))
525
 
select left(a1,7), left(a2,7)
526
 
from t1_16
527
 
where a1 in (select group_concat(b1) from t2_16 group by b2);
528
 
left(a1,7)      left(a2,7)
529
 
1 - 01x 2 - 01x
530
 
1 - 02x 2 - 02x
531
 
explain extended
532
 
select * from t1
533
 
where concat(a1,'x') IN
534
 
(select left(a1,8) from t1_16
535
 
where (a1, a2) IN
536
 
(select t2_16.b1, t2_16.b2 from t2_16, t2
537
 
where t2.b2 = substring(t2_16.b2,1,6) and
538
 
t2.b1 IN (select c1 from t3 where c2 > '0')));
539
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
540
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
541
 
2       SUBQUERY        t1_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
542
 
3       DEPENDENT SUBQUERY      t2_16   ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
543
 
3       DEPENDENT SUBQUERY      t2      ALL     NULL    NULL    NULL    NULL    5       100.00  Using where; Using join buffer
544
 
4       SUBQUERY        t3      ALL     NULL    NULL    NULL    NULL    4       100.00  Using where
545
 
Warnings:
546
 
Note    1003    select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>(concat(`test`.`t1`.`a1`,'x'),concat(`test`.`t1`.`a1`,'x') in ( <materialize> (select left(`test`.`t1_16`.`a1`,8) AS `left(a1,8)` from `test`.`t1_16` where <in_optimizer>((`test`.`t1_16`.`a1`,`test`.`t1_16`.`a2`),(`test`.`t1_16`.`a1`,`test`.`t1_16`.`a2`) in (select `test`.`t2_16`.`b1` AS `b1`,`test`.`t2_16`.`b2` AS `b2` from `test`.`t2_16` join `test`.`t2` where ((`test`.`t2`.`b2` = substr(`test`.`t2_16`.`b2`,1,6)) and <in_optimizer>(`test`.`t2`.`b1`,`test`.`t2`.`b1` in ( <materialize> (select `test`.`t3`.`c1` AS `c1` from `test`.`t3` where (`test`.`t3`.`c2` > '0') ), <primary_index_lookup>(`test`.`t2`.`b1` in <temporary table> on distinct_key))) and (<cache>(`test`.`t1_16`.`a1`) = `test`.`t2_16`.`b1`) and (<cache>(`test`.`t1_16`.`a2`) = `test`.`t2_16`.`b2`)))) ), <primary_index_lookup>(concat(`test`.`t1`.`a1`,'x') in <temporary table> on distinct_key)))
547
 
drop table t1_16, t2_16, t3_16;
548
 
set @blob_len = 512;
549
 
set @suffix_len = @blob_len - @prefix_len;
550
 
create temporary table t1_512 (a1 blob, a2 blob) ENGINE=MyISAM;
551
 
create temporary table t2_512 (b1 blob, b2 blob) ENGINE=MyISAM;
552
 
create temporary table t3_512 (c1 blob, c2 blob) ENGINE=MyISAM;
553
 
insert into t1_512 values
554
 
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
555
 
insert into t1_512 values
556
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
557
 
insert into t1_512 values
558
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
559
 
insert into t2_512 values
560
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
561
 
insert into t2_512 values
562
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
563
 
insert into t2_512 values
564
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
565
 
insert into t3_512 values
566
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
567
 
insert into t3_512 values
568
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
569
 
insert into t3_512 values
570
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
571
 
insert into t3_512 values
572
 
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
573
 
explain extended select left(a1,7), left(a2,7)
574
 
from t1_512
575
 
where a1 in (select b1 from t2_512 where b1 > '0');
576
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
577
 
1       PRIMARY t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
578
 
2       DEPENDENT SUBQUERY      t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
579
 
Warnings:
580
 
Note    1003    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 (select 1 AS `Not_used` from `test`.`t2_512` where ((`test`.`t2_512`.`b1` > '0') and (<cache>(`test`.`t1_512`.`a1`) = `test`.`t2_512`.`b1`))))
581
 
select left(a1,7), left(a2,7)
582
 
from t1_512
583
 
where a1 in (select b1 from t2_512 where b1 > '0');
584
 
left(a1,7)      left(a2,7)
585
 
1 - 01x 2 - 01x
586
 
1 - 02x 2 - 02x
587
 
explain extended select left(a1,7), left(a2,7)
588
 
from t1_512
589
 
where (a1,a2) in (select b1, b2 from t2_512 where b1 > '0');
590
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
591
 
1       PRIMARY t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
592
 
2       DEPENDENT SUBQUERY      t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
593
 
Warnings:
594
 
Note    1003    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`.`a2`),(`test`.`t1_512`.`a1`,`test`.`t1_512`.`a2`) in (select `test`.`t2_512`.`b1` AS `b1`,`test`.`t2_512`.`b2` AS `b2` from `test`.`t2_512` where ((`test`.`t2_512`.`b1` > '0') and (<cache>(`test`.`t1_512`.`a1`) = `test`.`t2_512`.`b1`) and (<cache>(`test`.`t1_512`.`a2`) = `test`.`t2_512`.`b2`))))
595
 
select left(a1,7), left(a2,7)
596
 
from t1_512
597
 
where (a1,a2) in (select b1, b2 from t2_512 where b1 > '0');
598
 
left(a1,7)      left(a2,7)
599
 
1 - 01x 2 - 01x
600
 
1 - 02x 2 - 02x
601
 
explain extended select left(a1,7), left(a2,7)
602
 
from t1_512
603
 
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
604
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
605
 
1       PRIMARY t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
606
 
2       SUBQUERY        t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
607
 
Warnings:
608
 
Note    1003    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 substr(`test`.`t2_512`.`b1`,1,512) AS `substring(b1,1,512)` from `test`.`t2_512` where (`test`.`t2_512`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on distinct_key)))
609
 
select left(a1,7), left(a2,7)
610
 
from t1_512
611
 
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
612
 
left(a1,7)      left(a2,7)
613
 
1 - 01x 2 - 01x
614
 
1 - 02x 2 - 02x
615
 
explain extended select left(a1,7), left(a2,7)
616
 
from t1_512
617
 
where a1 in (select group_concat(b1) from t2_512 group by b2);
618
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
619
 
1       PRIMARY t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
620
 
2       SUBQUERY        t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
621
 
Warnings:
622
 
Note    1003    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 group_concat(`test`.`t2_512`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_512` group by `test`.`t2_512`.`b2` ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on distinct_key)))
623
 
select left(a1,7), left(a2,7)
624
 
from t1_512
625
 
where a1 in (select group_concat(b1) from t2_512 group by b2);
626
 
left(a1,7)      left(a2,7)
627
 
1 - 01x 2 - 01x
628
 
1 - 02x 2 - 02x
629
 
set @@group_concat_max_len = 256;
630
 
explain extended select left(a1,7), left(a2,7)
631
 
from t1_512
632
 
where a1 in (select group_concat(b1) from t2_512 group by b2);
633
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
634
 
1       PRIMARY t1_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
635
 
2       SUBQUERY        t2_512  ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
636
 
Warnings:
637
 
Note    1003    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 group_concat(`test`.`t2_512`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_512` group by `test`.`t2_512`.`b2` ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on distinct_key)))
638
 
select left(a1,7), left(a2,7)
639
 
from t1_512
640
 
where a1 in (select group_concat(b1) from t2_512 group by b2);
641
 
left(a1,7)      left(a2,7)
642
 
1 - 01x 2 - 01x
643
 
1 - 02x 2 - 02x
644
 
drop table t1_512, t2_512, t3_512;
645
 
set @blob_len = 1024;
646
 
set @suffix_len = @blob_len - @prefix_len;
647
 
create temporary table t1_1024 (a1 blob, a2 blob) ENGINE=MyISAM;
648
 
create temporary table t2_1024 (b1 blob, b2 blob) ENGINE=MyISAM;
649
 
create temporary table t3_1024 (c1 blob, c2 blob) ENGINE=MyISAM;
650
 
insert into t1_1024 values
651
 
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
652
 
insert into t1_1024 values
653
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
654
 
insert into t1_1024 values
655
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
656
 
insert into t2_1024 values
657
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
658
 
insert into t2_1024 values
659
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
660
 
insert into t2_1024 values
661
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
662
 
insert into t3_1024 values
663
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
664
 
insert into t3_1024 values
665
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
666
 
insert into t3_1024 values
667
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
668
 
insert into t3_1024 values
669
 
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
670
 
explain extended select left(a1,7), left(a2,7)
671
 
from t1_1024
672
 
where a1 in (select b1 from t2_1024 where b1 > '0');
673
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
674
 
1       PRIMARY t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
675
 
2       DEPENDENT SUBQUERY      t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
676
 
Warnings:
677
 
Note    1003    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 (select 1 AS `Not_used` from `test`.`t2_1024` where ((`test`.`t2_1024`.`b1` > '0') and (<cache>(`test`.`t1_1024`.`a1`) = `test`.`t2_1024`.`b1`))))
678
 
select left(a1,7), left(a2,7)
679
 
from t1_1024
680
 
where a1 in (select b1 from t2_1024 where b1 > '0');
681
 
left(a1,7)      left(a2,7)
682
 
1 - 01x 2 - 01x
683
 
1 - 02x 2 - 02x
684
 
explain extended select left(a1,7), left(a2,7)
685
 
from t1_1024
686
 
where (a1,a2) in (select b1, b2 from t2_1024 where b1 > '0');
687
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
688
 
1       PRIMARY t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
689
 
2       DEPENDENT SUBQUERY      t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
690
 
Warnings:
691
 
Note    1003    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`.`a2`),(`test`.`t1_1024`.`a1`,`test`.`t1_1024`.`a2`) in (select `test`.`t2_1024`.`b1` AS `b1`,`test`.`t2_1024`.`b2` AS `b2` from `test`.`t2_1024` where ((`test`.`t2_1024`.`b1` > '0') and (<cache>(`test`.`t1_1024`.`a1`) = `test`.`t2_1024`.`b1`) and (<cache>(`test`.`t1_1024`.`a2`) = `test`.`t2_1024`.`b2`))))
692
 
select left(a1,7), left(a2,7)
693
 
from t1_1024
694
 
where (a1,a2) in (select b1, b2 from t2_1024 where b1 > '0');
695
 
left(a1,7)      left(a2,7)
696
 
1 - 01x 2 - 01x
697
 
1 - 02x 2 - 02x
698
 
explain extended select left(a1,7), left(a2,7)
699
 
from t1_1024
700
 
where a1 in (select substring(b1,1,1024) from t2_1024 where b1 > '0');
701
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
702
 
1       PRIMARY t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
703
 
2       DEPENDENT SUBQUERY      t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
704
 
Warnings:
705
 
Note    1003    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 (select 1 AS `Not_used` from `test`.`t2_1024` where ((`test`.`t2_1024`.`b1` > '0') and (<cache>(`test`.`t1_1024`.`a1`) = substr(`test`.`t2_1024`.`b1`,1,1024)))))
706
 
select left(a1,7), left(a2,7)
707
 
from t1_1024
708
 
where a1 in (select substring(b1,1,1024) from t2_1024 where b1 > '0');
709
 
left(a1,7)      left(a2,7)
710
 
1 - 01x 2 - 01x
711
 
1 - 02x 2 - 02x
712
 
explain extended select left(a1,7), left(a2,7)
713
 
from t1_1024
714
 
where a1 in (select group_concat(b1) from t2_1024 group by b2);
715
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
716
 
1       PRIMARY t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
717
 
2       SUBQUERY        t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
718
 
Warnings:
719
 
Note    1003    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 group_concat(`test`.`t2_1024`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` ), <primary_index_lookup>(`test`.`t1_1024`.`a1` in <temporary table> on distinct_key)))
720
 
select left(a1,7), left(a2,7)
721
 
from t1_1024
722
 
where a1 in (select group_concat(b1) from t2_1024 group by b2);
723
 
left(a1,7)      left(a2,7)
724
 
1 - 01x 2 - 01x
725
 
1 - 02x 2 - 02x
726
 
set @@group_concat_max_len = 256;
727
 
explain extended select left(a1,7), left(a2,7)
728
 
from t1_1024
729
 
where a1 in (select group_concat(b1) from t2_1024 group by b2);
730
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
731
 
1       PRIMARY t1_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
732
 
2       SUBQUERY        t2_1024 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
733
 
Warnings:
734
 
Note    1003    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 group_concat(`test`.`t2_1024`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` ), <primary_index_lookup>(`test`.`t1_1024`.`a1` in <temporary table> on distinct_key)))
735
 
select left(a1,7), left(a2,7)
736
 
from t1_1024
737
 
where a1 in (select group_concat(b1) from t2_1024 group by b2);
738
 
left(a1,7)      left(a2,7)
739
 
1 - 01x 2 - 01x
740
 
1 - 02x 2 - 02x
741
 
drop table t1_1024, t2_1024, t3_1024;
742
 
set @blob_len = 1025;
743
 
set @suffix_len = @blob_len - @prefix_len;
744
 
create temporary table t1_1025 (a1 blob, a2 blob) ENGINE=MyISAM;
745
 
create temporary table t2_1025 (b1 blob, b2 blob) ENGINE=MyISAM;
746
 
create temporary table t3_1025 (c1 blob, c2 blob) ENGINE=MyISAM;
747
 
insert into t1_1025 values
748
 
(concat('1 - 00', repeat('x', @suffix_len)), concat('2 - 00', repeat('x', @suffix_len)));
749
 
insert into t1_1025 values
750
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
751
 
insert into t1_1025 values
752
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
753
 
insert into t2_1025 values
754
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
755
 
insert into t2_1025 values
756
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
757
 
insert into t2_1025 values
758
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
759
 
insert into t3_1025 values
760
 
(concat('1 - 01', repeat('x', @suffix_len)), concat('2 - 01', repeat('x', @suffix_len)));
761
 
insert into t3_1025 values
762
 
(concat('1 - 02', repeat('x', @suffix_len)), concat('2 - 02', repeat('x', @suffix_len)));
763
 
insert into t3_1025 values
764
 
(concat('1 - 03', repeat('x', @suffix_len)), concat('2 - 03', repeat('x', @suffix_len)));
765
 
insert into t3_1025 values
766
 
(concat('1 - 04', repeat('x', @suffix_len)), concat('2 - 04', repeat('x', @suffix_len)));
767
 
explain extended select left(a1,7), left(a2,7)
768
 
from t1_1025
769
 
where a1 in (select b1 from t2_1025 where b1 > '0');
770
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
771
 
1       PRIMARY t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
772
 
2       DEPENDENT SUBQUERY      t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
773
 
Warnings:
774
 
Note    1003    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 (select 1 AS `Not_used` from `test`.`t2_1025` where ((`test`.`t2_1025`.`b1` > '0') and (<cache>(`test`.`t1_1025`.`a1`) = `test`.`t2_1025`.`b1`))))
775
 
select left(a1,7), left(a2,7)
776
 
from t1_1025
777
 
where a1 in (select b1 from t2_1025 where b1 > '0');
778
 
left(a1,7)      left(a2,7)
779
 
1 - 01x 2 - 01x
780
 
1 - 02x 2 - 02x
781
 
explain extended select left(a1,7), left(a2,7)
782
 
from t1_1025
783
 
where (a1,a2) in (select b1, b2 from t2_1025 where b1 > '0');
784
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
785
 
1       PRIMARY t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
786
 
2       DEPENDENT SUBQUERY      t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
787
 
Warnings:
788
 
Note    1003    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`.`a2`),(`test`.`t1_1025`.`a1`,`test`.`t1_1025`.`a2`) in (select `test`.`t2_1025`.`b1` AS `b1`,`test`.`t2_1025`.`b2` AS `b2` from `test`.`t2_1025` where ((`test`.`t2_1025`.`b1` > '0') and (<cache>(`test`.`t1_1025`.`a1`) = `test`.`t2_1025`.`b1`) and (<cache>(`test`.`t1_1025`.`a2`) = `test`.`t2_1025`.`b2`))))
789
 
select left(a1,7), left(a2,7)
790
 
from t1_1025
791
 
where (a1,a2) in (select b1, b2 from t2_1025 where b1 > '0');
792
 
left(a1,7)      left(a2,7)
793
 
1 - 01x 2 - 01x
794
 
1 - 02x 2 - 02x
795
 
explain extended select left(a1,7), left(a2,7)
796
 
from t1_1025
797
 
where a1 in (select substring(b1,1,1025) from t2_1025 where b1 > '0');
798
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
799
 
1       PRIMARY t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
800
 
2       DEPENDENT SUBQUERY      t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
801
 
Warnings:
802
 
Note    1003    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 (select 1 AS `Not_used` from `test`.`t2_1025` where ((`test`.`t2_1025`.`b1` > '0') and (<cache>(`test`.`t1_1025`.`a1`) = substr(`test`.`t2_1025`.`b1`,1,1025)))))
803
 
select left(a1,7), left(a2,7)
804
 
from t1_1025
805
 
where a1 in (select substring(b1,1,1025) from t2_1025 where b1 > '0');
806
 
left(a1,7)      left(a2,7)
807
 
1 - 01x 2 - 01x
808
 
1 - 02x 2 - 02x
809
 
explain extended select left(a1,7), left(a2,7)
810
 
from t1_1025
811
 
where a1 in (select group_concat(b1) from t2_1025 group by b2);
812
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
813
 
1       PRIMARY t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
814
 
2       SUBQUERY        t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
815
 
Warnings:
816
 
Note    1003    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 group_concat(`test`.`t2_1025`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` ), <primary_index_lookup>(`test`.`t1_1025`.`a1` in <temporary table> on distinct_key)))
817
 
select left(a1,7), left(a2,7)
818
 
from t1_1025
819
 
where a1 in (select group_concat(b1) from t2_1025 group by b2);
820
 
left(a1,7)      left(a2,7)
821
 
1 - 01x 2 - 01x
822
 
1 - 02x 2 - 02x
823
 
set @@group_concat_max_len = 256;
824
 
explain extended select left(a1,7), left(a2,7)
825
 
from t1_1025
826
 
where a1 in (select group_concat(b1) from t2_1025 group by b2);
827
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
828
 
1       PRIMARY t1_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using where
829
 
2       SUBQUERY        t2_1025 ALL     NULL    NULL    NULL    NULL    3       100.00  Using filesort
830
 
Warnings:
831
 
Note    1003    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 group_concat(`test`.`t2_1025`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` ), <primary_index_lookup>(`test`.`t1_1025`.`a1` in <temporary table> on distinct_key)))
832
 
select left(a1,7), left(a2,7)
833
 
from t1_1025
834
 
where a1 in (select group_concat(b1) from t2_1025 group by b2);
835
 
left(a1,7)      left(a2,7)
836
 
1 - 01x 2 - 01x
837
 
1 - 02x 2 - 02x
838
 
drop table t1_1025, t2_1025, t3_1025;
839
 
drop table t1, t2, t3;
840
 
/******************************************************************************
841
 
* Test the cache of the left operand of IN.
842
 
******************************************************************************/
843
 
# Test that default values of Cached_item are not used for comparison
844
 
create temporary table t1 (s1 int) ENGINE=MyISAM;
845
 
create temporary table t2 (s2 int) ENGINE=MyISAM;
846
 
insert into t1 values (5),(1),(0);
847
 
insert into t2 values (0), (1);
848
 
select s2 from t2 where s2 in (select s1 from t1);
849
 
s2
850
 
0
851
 
1
852
 
drop table t1, t2;
853
 
create temporary table t1 (a int not null, b int not null) ENGINE=MyISAM;
854
 
create temporary table t2 (c int not null, d int not null) ENGINE=MyISAM;
855
 
create temporary table t3 (e int not null) ENGINE=MyISAM;
856
 
insert into t1 values (1,10);
857
 
insert into t1 values (1,20);
858
 
insert into t1 values (2,10);
859
 
insert into t1 values (2,20);
860
 
insert into t1 values (2,30);
861
 
insert into t1 values (3,20);
862
 
insert into t1 values (4,40);
863
 
insert into t2 values (2,10);
864
 
insert into t2 values (2,20);
865
 
insert into t2 values (2,40);
866
 
insert into t2 values (3,20);
867
 
insert into t2 values (4,10);
868
 
insert into t2 values (5,10);
869
 
insert into t3 values (10);
870
 
insert into t3 values (10);
871
 
insert into t3 values (20);
872
 
insert into t3 values (30);
873
 
explain extended
874
 
select a from t1 where a in (select c from t2 where d >= 20);
875
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
876
 
1       PRIMARY t1      ALL     NULL    NULL    NULL    NULL    7       100.00  Using where
877
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    6       100.00  Using where
878
 
Warnings:
879
 
Note    1003    select `test`.`t1`.`a` AS `a` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key)))
880
 
select a from t1 where a in (select c from t2 where d >= 20);
881
 
a
882
 
2
883
 
2
884
 
2
885
 
3
886
 
create index it1a on t1(a);
887
 
explain extended
888
 
select a from t1 where a in (select c from t2 where d >= 20);
889
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
890
 
1       PRIMARY t1      index   NULL    it1a    4       NULL    7       100.00  Using where; Using index
891
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    6       100.00  Using where
892
 
Warnings:
893
 
Note    1003    select `test`.`t1`.`a` AS `a` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key)))
894
 
select a from t1 where a in (select c from t2 where d >= 20);
895
 
a
896
 
2
897
 
2
898
 
2
899
 
3
900
 
insert into t2 values (1,10);
901
 
explain extended
902
 
select a from t1 where a in (select c from t2 where d >= 20);
903
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
904
 
1       PRIMARY t1      index   NULL    it1a    4       NULL    7       100.00  Using where; Using index
905
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    7       100.00  Using where
906
 
Warnings:
907
 
Note    1003    select `test`.`t1`.`a` AS `a` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key)))
908
 
select a from t1 where a in (select c from t2 where d >= 20);
909
 
a
910
 
2
911
 
2
912
 
2
913
 
3
914
 
explain extended
915
 
select a from t1 group by a having a in (select c from t2 where d >= 20);
916
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
917
 
1       PRIMARY t1      index   NULL    it1a    4       NULL    7       100.00  Using index
918
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    7       100.00  Using where
919
 
Warnings:
920
 
Note    1003    select `test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a` having <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key)))
921
 
select a from t1 group by a having a in (select c from t2 where d >= 20);
922
 
a
923
 
2
924
 
3
925
 
create index iab on t1(a, b);
926
 
explain extended
927
 
select a from t1 group by a having a in (select c from t2 where d >= 20);
928
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
929
 
1       PRIMARY t1      index   NULL    it1a    4       NULL    7       100.00  Using index
930
 
2       SUBQUERY        t2      ALL     NULL    NULL    NULL    NULL    7       100.00  Using where
931
 
Warnings:
932
 
Note    1003    select `test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a` having <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key)))
933
 
select a from t1 group by a having a in (select c from t2 where d >= 20);
934
 
a
935
 
2
936
 
3
937
 
explain extended
938
 
select a from t1 group by a
939
 
having a in (select c from t2 where d >= some(select e from t3 where max(b)=e));
940
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
941
 
1       PRIMARY t1      index   NULL    iab     8       NULL    7       100.00  Using index
942
 
2       DEPENDENT SUBQUERY      t2      ALL     NULL    NULL    NULL    NULL    7       100.00  Using where
943
 
3       DEPENDENT SUBQUERY      t3      ALL     NULL    NULL    NULL    NULL    4       100.00  Using where
944
 
Warnings:
945
 
Note    1276    Field or reference 'test.t1.b' of SELECT #3 was resolved in SELECT #1
946
 
Note    1003    select `test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a` having <in_optimizer>(`test`.`t1`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t2` where (<nop>(<in_optimizer>(`test`.`t2`.`d`,<exists>(select `test`.`t3`.`e` AS `e` from `test`.`t3` where (max(`test`.`t1`.`b`) = `test`.`t3`.`e`) having (<cache>(`test`.`t2`.`d`) >= <ref_null_helper>(`test`.`t3`.`e`))))) and (<cache>(`test`.`t1`.`a`) = `test`.`t2`.`c`))))
947
 
select a from t1 group by a
948
 
having a in (select c from t2 where d >= some(select e from t3 where max(b)=e));
949
 
a
950
 
2
951
 
3
952
 
explain extended
953
 
select a from t1
954
 
where a in (select c from t2 where d >= some(select e from t3 where b=e));
955
 
id      select_type     table   type    possible_keys   key     key_len ref     rows    filtered        Extra
956
 
1       PRIMARY t1      index   NULL    iab     8       NULL    7       100.00  Using where; Using index
957
 
2       DEPENDENT SUBQUERY      t2      ALL     NULL    NULL    NULL    NULL    7       100.00  Using where
958
 
3       DEPENDENT SUBQUERY      t3      ALL     NULL    NULL    NULL    NULL    4       100.00  Using where
959
 
Warnings:
960
 
Note    1276    Field or reference 'test.t1.b' of SELECT #3 was resolved in SELECT #1
961
 
Note    1003    select `test`.`t1`.`a` AS `a` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t2` where (<nop>(<in_optimizer>(`test`.`t2`.`d`,<exists>(select 1 AS `Not_used` from `test`.`t3` where ((`test`.`t1`.`b` = `test`.`t3`.`e`) and (<cache>(`test`.`t2`.`d`) >= `test`.`t3`.`e`))))) and (<cache>(`test`.`t1`.`a`) = `test`.`t2`.`c`))))
962
 
select a from t1
963
 
where a in (select c from t2 where d >= some(select e from t3 where b=e));
964
 
a
965
 
1
966
 
2
967
 
2
968
 
2
969
 
3
970
 
drop table t1, t2, t3;