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
create table t1 (a int) ENGINE=MYISAM;
141
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
142
create table t2 (a int, filler char(200), key(a)) ENGINE=MYISAM;
144
insert into t2 select C.a*2, 'no' from t1 A, t1 B, t1 C;
145
insert into t2 select C.a*2+1, 'yes' from t1 C;
148
select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18);
149
select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18);
151
explain select * from t2 force index(a) where a NOT IN (2,2,2,2,2,2);
152
explain select * from t2 force index(a) where a <> 2;
157
# Repeat the test for DATETIME
159
create table t2 (a datetime, filler char(200), key(a));
161
insert into t2 select '2006-04-25 10:00:00' + interval C.a minute,
162
'no' from t1 A, t1 B, t1 C where C.a % 2 = 0;
164
insert into t2 select '2006-04-25 10:00:00' + interval C.a*2+1 minute,
168
select * from t2 where a NOT IN (
169
'2006-04-25 10:00:00','2006-04-25 10:02:00','2006-04-25 10:04:00',
170
'2006-04-25 10:06:00', '2006-04-25 10:08:00');
171
select * from t2 where a NOT IN (
172
'2006-04-25 10:00:00','2006-04-25 10:02:00','2006-04-25 10:04:00',
173
'2006-04-25 10:06:00', '2006-04-25 10:08:00');
177
# Repeat the test for CHAR(N)
179
create table t2 (a varchar(10), filler char(200), key(a));
181
insert into t2 select 'foo', 'no' from t1 A, t1 B;
182
insert into t2 select 'barbar', 'no' from t1 A, t1 B;
183
insert into t2 select 'bazbazbaz', 'no' from t1 A, t1 B;
185
insert into t2 values ('fon', '1'), ('fop','1'), ('barbaq','1'),
186
('barbas','1'), ('bazbazbay', '1'),('zz','1');
188
explain select * from t2 where a not in('foo','barbar', 'bazbazbaz');
195
create table t2 (a decimal(10,5), filler char(200), key(a));
197
insert into t2 select 345.67890, 'no' from t1 A, t1 B;
198
insert into t2 select 43245.34, 'no' from t1 A, t1 B;
199
insert into t2 select 64224.56344, 'no' from t1 A, t1 B;
201
insert into t2 values (0, '1'), (22334.123,'1'), (33333,'1'),
202
(55555,'1'), (77777, '1');
205
select * from t2 where a not in (345.67890, 43245.34, 64224.56344);
206
select * from t2 where a not in (345.67890, 43245.34, 64224.56344);
210
# Try a very big IN-list
211
create table t2 (a int, key(a), b int);
212
insert into t2 values (1,1),(2,2);
215
set @str="update t2 set b=1 where a not in (";
216
select count(*) from (
217
select @str:=concat(@str, @cnt:=@cnt+1, ",")
218
from t1 A, t1 B, t1 C, t1 D) Z;
220
set @str:=concat(@str, "10000)");
221
select substr(@str, 1, 50);
227
# BUG#19618: Crash in range optimizer for
228
# "unsigned_keypart NOT IN(negative_number,...)"
229
# (introduced in fix BUG#15872)
234
insert into t1 values (1),(2);
235
select some_id from t1 where some_id not in(2,-1);
236
select some_id from t1 where some_id not in(-4,-1,-4);
237
select some_id from t1 where some_id not in(-4,-1,3423534,2342342);
240
# BUG#24261: crash when WHERE contains NOT IN ('<negative value>') for column type
243
select some_id from t1 where some_id not in('-1', '0');
248
# BUG#20420: optimizer reports wrong keys on left join with IN
250
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a));
251
INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1),(5,1),(6,1);
253
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a));
254
INSERT INTO t2 VALUES (3,2),(4,2),(100,100),(101,201),(102,102);
256
CREATE TABLE t3 (a int PRIMARY KEY);
257
INSERT INTO t3 VALUES (1),(2),(3),(4);
259
CREATE TABLE t4 (a int PRIMARY KEY,b int);
260
INSERT INTO t4 VALUES (1,1),(2,2),(1000,1000),(1001,1001),(1002,1002),
261
(1003,1003),(1004,1004);
263
EXPLAIN SELECT STRAIGHT_JOIN * FROM t3
266
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
268
SELECT STRAIGHT_JOIN * FROM t3
271
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
273
EXPLAIN SELECT STRAIGHT_JOIN
274
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
276
WHERE t3.a=t1.a AND t3.a=t2.a;
279
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
281
WHERE t3.a=t1.a AND t3.a=t2.a;
283
DROP TABLE t1,t2,t3,t4;
286
# BUG#19342: IN works incorrectly for BIGINT values
288
CREATE TABLE t1(a BIGINT);
289
INSERT INTO t1 VALUES (0x0FFFFFFFFFFFFFFF);
291
SELECT * FROM t1 WHERE a=-1 OR a=-2 ;
292
SELECT * FROM t1 WHERE a IN (-1, -2);
294
CREATE TABLE t2 (a BIGINT);
295
insert into t2 values(13491727406643098568),
296
(0x0fffffefffffffff),
297
(0x0ffffffeffffffff),
298
(0x0fffffffefffffff),
299
(0x0ffffffffeffffff),
300
(0x0fffffffffefffff),
301
(0x0ffffffffffeffff),
302
(0x0fffffffffffefff),
303
(0x0ffffffffffffeff),
304
(0x0fffffffffffffef),
305
(0x0ffffffffffffffe),
306
(0x0fffffffffffffff),
307
(0x2000000000000000),
308
(0x2000000000000001),
309
(0x2000000000000002),
310
(0x2000000000000300),
311
(0x2000000000000400),
312
(0x2000000000000401),
313
(0x2000000000004001),
314
(0x2000000000040001),
315
(0x2000000000400001),
316
(0x2000000004000001),
317
(0x2000000040000001),
318
(0x2000000400000001),
319
(0x2000004000000001),
320
(0x2000040000000001);
322
SELECT HEX(a) FROM t2 WHERE a IN (0xBB3C3E98175D33C8, 42);
324
SELECT HEX(a) FROM t2 WHERE a IN
332
SELECT HEX(a) FROM t2 WHERE a IN
335
SELECT HEX(a) FROM t2 WHERE a IN
338
SELECT HEX(a) FROM t2 WHERE a IN
343
CREATE TABLE t3 (a BIGINT);
344
INSERT INTO t3 VALUES (9223372036854775551);
346
SELECT HEX(a) FROM t3 WHERE a IN (9223372036854775807, 42);
348
CREATE TABLE t4 (a DATE);
349
INSERT INTO t4 VALUES ('1972-02-06'), ('1972-07-29');
350
SELECT * FROM t4 WHERE a IN ('1972-02-06','19772-07-29');
352
DROP TABLE t1,t2,t3,t4;
355
# BUG#27362: IN with a decimal expression that may return NULL
358
CREATE TABLE t1 (id int not null);
359
INSERT INTO t1 VALUES (1),(2);
361
SELECT id FROM t1 WHERE id IN(4564, (SELECT IF(1=0,1,1/0)) );
365
--echo End of 5.0 tests
369
# Bug#18360: Type aggregation for IN and CASE may lead to a wrong result
371
create table t1(f1 char(1)) ENGINE=MYISAM;
372
insert into t1 values ('a'),('b'),('1');
373
select f1 from t1 where f1 in ('a',1);
374
select f1, case f1 when 'a' then '+' when 1 then '-' end from t1;
375
create index t1f1_idx on t1(f1);
376
select f1 from t1 where f1 in ('a',1);
377
explain select f1 from t1 where f1 in ('a',1);
378
select f1 from t1 where f1 in ('a','b');
379
explain select f1 from t1 where f1 in ('a','b');
380
select f1 from t1 where f1 in (2,1);
381
explain select f1 from t1 where f1 in (2,1);
382
create table t2(f2 int, index t2f2(f2)) ENGINE=MYISAM;
383
insert into t2 values(0),(1),(2);
384
select f2 from t2 where f2 in ('a',2);
385
explain select f2 from t2 where f2 in ('a',2);
386
select f2 from t2 where f2 in ('a','b');
387
explain select f2 from t2 where f2 in ('a','b');
388
select f2 from t2 where f2 in (1,'b');
389
explain select f2 from t2 where f2 in (1,'b');
393
# Bug #31075: crash in get_func_mm_tree
396
create table t1 (a time, key(a));
397
insert into t1 values (),(),(),(),(),(),(),(),(),();
398
select a from t1 where a not in (a,a,a) group by a;
401
--echo End of 5.1 tests