3
drop table if exists t1, t2;
11
select NULL in (1,2,3);
12
select 1 in (1,NULL,3);
13
select 3 in (1,NULL,3);
14
select 10 in (1,NULL,3);
15
select 1.5 in (1.5,2.5,3.5);
16
select 10.5 in (1.5,2.5,3.5);
17
select NULL in (1.5,2.5,3.5);
18
select 1.5 in (1.5,NULL,3.5);
19
select 3.5 in (1.5,NULL,3.5);
20
select 10.5 in (1.5,NULL,3.5);
22
CREATE TABLE t1 (a int, b int, c int);
23
insert into t1 values (1,2,3), (1,NULL,3);
24
select 1 in (a,b,c) from t1;
25
select 3 in (a,b,c) from t1;
26
select 10 in (a,b,c) from t1;
27
select NULL in (a,b,c) from t1;
29
CREATE TABLE t1 (a float, b float, c float);
30
insert into t1 values (1.5,2.5,3.5), (1.5,NULL,3.5);
31
select 1.5 in (a,b,c) from t1;
32
select 3.5 in (a,b,c) from t1;
33
select 10.5 in (a,b,c) from t1;
35
CREATE TABLE t1 (a varchar(10), b varchar(10), c varchar(10));
36
insert into t1 values ('A','BC','EFD'), ('A',NULL,'EFD');
37
select 'A' in (a,b,c) from t1;
38
select 'EFD' in (a,b,c) from t1;
39
select 'XSFGGHF' in (a,b,c) from t1;
42
CREATE TABLE t1 (field char(1));
43
INSERT INTO t1 VALUES ('A'),(NULL);
44
SELECT * from t1 WHERE field IN (NULL);
45
SELECT * from t1 WHERE field NOT IN (NULL);
46
SELECT * from t1 where field = field;
47
SELECT * from t1 where field <=> field;
48
DELETE FROM t1 WHERE field NOT IN (NULL);
52
create table t1 (id int primary key);
53
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9);
54
select * from t1 where id in (2,5,9);
62
insert into t1 values ('A','B','C');
63
insert into t1 values ('a','c','c');
64
select * from t1 where a in (b);
65
select * from t1 where a in (b,c);
66
select * from t1 where 'a' in (a,b,c);
67
select * from t1 where 'a' in (a);
68
select * from t1 where a in ('a');
69
select * from t1 where 'a' collate utf8_general_ci in (a,b,c);
70
select * from t1 where 'a' collate utf8_bin in (a,b,c);
71
select * from t1 where 'a' in (a,b,c collate utf8_bin);
72
explain extended select * from t1 where 'a' in (a,b,c collate utf8_bin);
75
# Bug#7834 Illegal mix of collations in IN operator
76
create table t1 (a char(10) not null);
77
insert into t1 values ('a'),('b'),('c');
78
select a from t1 where a IN ('a','b','c') order by a;
81
select '1.0' in (1,2);
82
select 1 in ('1.0',2);
83
select 1 in (1,'2.0');
84
select 1 in ('1.0',2.0);
85
select 1 in (1.0,'2.0');
86
select 1 in ('1.1',2);
87
select 1 in ('1.1',2.0);
89
# Test case for bug #6365
91
create table t1 (a char(2));
92
insert into t1 values ('aa'), ('bb');
93
select * from t1 where a in (NULL, 'aa');
97
create table t1 (id int, key(id));
98
insert into t1 values (1),(2),(3);
99
select count(*) from t1 where id not in (1);
100
select count(*) from t1 where id not in (1,2);
105
# BUG#17047: CHAR() and IN() can return NULL without signaling NULL
108
# The problem was in the IN() function that ignored maybe_null flags
109
# of all arguments except the first (the one _before_ the IN
110
# keyword, '1' in the test case below).
113
DROP TABLE IF EXISTS t1;
116
CREATE TABLE t1 SELECT 1 IN (2, NULL);
117
--echo SELECT should return NULL.
123
--echo End of 4.1 tests
127
# Bug #11885: WHERE condition with NOT IN (one element)
130
CREATE TABLE t1 (a int PRIMARY KEY);
131
INSERT INTO t1 VALUES (44), (45), (46);
133
SELECT * FROM t1 WHERE a IN (45);
134
SELECT * FROM t1 WHERE a NOT IN (0, 45);
135
SELECT * FROM t1 WHERE a NOT IN (45);
139
# BUG#15872: Excessive memory consumption of range analysis of NOT IN
140
# I have disabled the EXPLAIN because we must use Innodb with this test.
141
create table t1 (a int);
142
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
143
create temporary table t2 (a int, filler char(200), key(a)) engine=myisam;
145
insert into t2 select C.a*2, 'no' from t1 A, t1 B, t1 C;
146
insert into t2 select C.a*2+1, 'yes' from t1 C;
149
select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18);
150
select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18);
153
explain select * from t2 force index(a) where a NOT IN (2,2,2,2,2,2);
154
explain select * from t2 force index(a) where a <> 2;
159
# Repeat the test for DATETIME
161
create table t2 (a datetime, filler char(200), key(a));
163
insert into t2 select '2006-04-25 10:00:00' + interval C.a minute,
164
'no' from t1 A, t1 B, t1 C where C.a % 2 = 0;
166
insert into t2 select '2006-04-25 10:00:00' + interval C.a*2+1 minute,
170
select * from t2 where a NOT IN (
171
'2006-04-25 10:00:00','2006-04-25 10:02:00','2006-04-25 10:04:00',
172
'2006-04-25 10:06:00', '2006-04-25 10:08:00');
173
select * from t2 where a NOT IN (
174
'2006-04-25 10:00:00','2006-04-25 10:02:00','2006-04-25 10:04:00',
175
'2006-04-25 10:06:00', '2006-04-25 10:08:00');
179
# Repeat the test for CHAR(N)
181
create table t2 (a varchar(10), filler char(200), key(a));
183
insert into t2 select 'foo', 'no' from t1 A, t1 B;
184
insert into t2 select 'barbar', 'no' from t1 A, t1 B;
185
insert into t2 select 'bazbazbaz', 'no' from t1 A, t1 B;
187
insert into t2 values ('fon', '1'), ('fop','1'), ('barbaq','1'),
188
('barbas','1'), ('bazbazbay', '1'),('zz','1');
190
explain select * from t2 where a not in('foo','barbar', 'bazbazbaz');
197
create table t2 (a decimal(10,5), filler char(200), key(a));
199
insert into t2 select 345.67890, 'no' from t1 A, t1 B;
200
insert into t2 select 43245.34, 'no' from t1 A, t1 B;
201
insert into t2 select 64224.56344, 'no' from t1 A, t1 B;
203
insert into t2 values (0, '1'), (22334.123,'1'), (33333,'1'),
204
(55555,'1'), (77777, '1');
207
select * from t2 where a not in (345.67890, 43245.34, 64224.56344);
208
select * from t2 where a not in (345.67890, 43245.34, 64224.56344);
212
# Try a very big IN-list
213
create table t2 (a int, key(a), b int);
214
insert into t2 values (1,1),(2,2);
217
set @str="update t2 set b=1 where a not in (";
218
select count(*) from (
219
select @str:=concat(@str, @cnt:=@cnt+1, ",")
220
from t1 A, t1 B, t1 C, t1 D) Z;
222
set @str:=concat(@str, "10000)");
223
select substr(@str, 1, 50);
229
# BUG#19618: Crash in range optimizer for
230
# "unsigned_keypart NOT IN(negative_number,...)"
231
# (introduced in fix BUG#15872)
236
insert into t1 values (1),(2);
237
select some_id from t1 where some_id not in(2,-1);
238
select some_id from t1 where some_id not in(-4,-1,-4);
239
select some_id from t1 where some_id not in(-4,-1,3423534,2342342);
242
# BUG#24261: crash when WHERE contains NOT IN ('<negative value>') for column type
245
select some_id from t1 where some_id not in('-1', '0');
250
# BUG#20420: optimizer reports wrong keys on left join with IN
252
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a));
253
INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1),(5,1),(6,1);
255
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a));
256
INSERT INTO t2 VALUES (3,2),(4,2),(100,100),(101,201),(102,102);
258
CREATE TABLE t3 (a int PRIMARY KEY);
259
INSERT INTO t3 VALUES (1),(2),(3),(4);
261
CREATE TABLE t4 (a int PRIMARY KEY,b int);
262
INSERT INTO t4 VALUES (1,1),(2,2),(1000,1000),(1001,1001),(1002,1002),
263
(1003,1003),(1004,1004);
265
EXPLAIN SELECT STRAIGHT_JOIN * FROM t3
268
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
270
SELECT STRAIGHT_JOIN * FROM t3
273
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
275
EXPLAIN SELECT STRAIGHT_JOIN
276
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
278
WHERE t3.a=t1.a AND t3.a=t2.a;
281
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
283
WHERE t3.a=t1.a AND t3.a=t2.a;
285
DROP TABLE t1,t2,t3,t4;
288
# BUG#19342: IN works incorrectly for BIGINT values
290
CREATE TABLE t1(a BIGINT);
291
INSERT INTO t1 VALUES (0x0FFFFFFFFFFFFFFF);
293
SELECT * FROM t1 WHERE a=-1 OR a=-2 ;
294
SELECT * FROM t1 WHERE a IN (-1, -2);
296
CREATE TABLE t2 (a BIGINT);
297
insert into t2 values(13491727406643098568),
298
(0x0fffffefffffffff),
299
(0x0ffffffeffffffff),
300
(0x0fffffffefffffff),
301
(0x0ffffffffeffffff),
302
(0x0fffffffffefffff),
303
(0x0ffffffffffeffff),
304
(0x0fffffffffffefff),
305
(0x0ffffffffffffeff),
306
(0x0fffffffffffffef),
307
(0x0ffffffffffffffe),
308
(0x0fffffffffffffff),
309
(0x2000000000000000),
310
(0x2000000000000001),
311
(0x2000000000000002),
312
(0x2000000000000300),
313
(0x2000000000000400),
314
(0x2000000000000401),
315
(0x2000000000004001),
316
(0x2000000000040001),
317
(0x2000000000400001),
318
(0x2000000004000001),
319
(0x2000000040000001),
320
(0x2000000400000001),
321
(0x2000004000000001),
322
(0x2000040000000001);
324
SELECT HEX(a) FROM t2 WHERE a IN (0xBB3C3E98175D33C8, 42);
326
SELECT HEX(a) FROM t2 WHERE a IN
334
SELECT HEX(a) FROM t2 WHERE a IN
337
SELECT HEX(a) FROM t2 WHERE a IN
340
SELECT HEX(a) FROM t2 WHERE a IN
345
CREATE TABLE t3 (a BIGINT);
346
INSERT INTO t3 VALUES (9223372036854775551);
348
SELECT HEX(a) FROM t3 WHERE a IN (9223372036854775807, 42);
350
CREATE TABLE t4 (a DATE);
351
INSERT INTO t4 VALUES ('1972-02-06'), ('1972-07-29');
352
SELECT * FROM t4 WHERE a IN ('1972-02-06','19772-07-29');
354
DROP TABLE t1,t2,t3,t4;
357
# BUG#27362: IN with a decimal expression that may return NULL
360
CREATE TABLE t1 (id int not null);
361
INSERT INTO t1 VALUES (1),(2);
363
SELECT id FROM t1 WHERE id IN(4564, (SELECT IF(1=0,1,1/0)) );
367
--echo End of 5.0 tests
371
# Bug#18360: Type aggregation for IN and CASE may lead to a wrong result
373
create TEMPORARY table t1(f1 char(1)) ENGINE=MYISAM;
374
insert into t1 values ('a'),('b'),('1');
375
select f1 from t1 where f1 in ('a',1);
376
select f1, case f1 when 'a' then '+' when 1 then '-' end from t1;
377
create index t1f1_idx on t1(f1);
378
select f1 from t1 where f1 in ('a',1);
379
explain select f1 from t1 where f1 in ('a',1);
380
select f1 from t1 where f1 in ('a','b');
381
explain select f1 from t1 where f1 in ('a','b');
382
select f1 from t1 where f1 in (2,1);
383
explain select f1 from t1 where f1 in (2,1);
384
create TEMPORARY table t2(f2 int, index t2f2(f2)) ENGINE=MYISAM;
385
insert into t2 values(0),(1),(2);
386
select f2 from t2 where f2 in ('a',2);
387
explain select f2 from t2 where f2 in ('a',2);
388
select f2 from t2 where f2 in ('a','b');
389
explain select f2 from t2 where f2 in ('a','b');
390
select f2 from t2 where f2 in (1,'b');
391
explain select f2 from t2 where f2 in (1,'b');
395
# Bug #31075: crash in get_func_mm_tree
398
create table t1 (a datetime, key(a));
399
insert into t1 values (),(),(),(),(),(),(),(),(),();
400
select a from t1 where a not in (a,a,a) group by a;
403
--echo End of 5.1 tests