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 where A.a < 10;
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 where A.a < 10;
184
insert into t2 select 'barbar', 'no' from t1 A, t1 B where A.a < 10;
185
insert into t2 select 'bazbazbaz', 'no' from t1 A, t1 B where A.a < 10;
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 where A.a < 10;
200
insert into t2 select 43245.34, 'no' from t1 A, t1 B where A.a < 10;
201
insert into t2 select 64224.56344, 'no' from t1 A, t1 B where A.a < 10;
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 where A.a < 10) 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);
266
EXPLAIN SELECT STRAIGHT_JOIN * FROM t3
269
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
271
SELECT STRAIGHT_JOIN * FROM t3
274
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
277
EXPLAIN SELECT STRAIGHT_JOIN
278
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
280
WHERE t3.a=t1.a AND t3.a=t2.a;
283
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
285
WHERE t3.a=t1.a AND t3.a=t2.a;
287
DROP TABLE t1,t2,t3,t4;
290
# BUG#19342: IN works incorrectly for BIGINT values
292
CREATE TABLE t1(a BIGINT);
293
INSERT INTO t1 VALUES (0x0FFFFFFFFFFFFFFF);
295
SELECT * FROM t1 WHERE a=-1 OR a=-2 ;
296
SELECT * FROM t1 WHERE a IN (-1, -2);
298
CREATE TABLE t2 (a BIGINT UNSIGNED);
299
insert into t2 values(13491727406643098568),
300
(0x0fffffefffffffff),
301
(0x0ffffffeffffffff),
302
(0x0fffffffefffffff),
303
(0x0ffffffffeffffff),
304
(0x0fffffffffefffff),
305
(0x0ffffffffffeffff),
306
(0x0fffffffffffefff),
307
(0x0ffffffffffffeff),
308
(0x0fffffffffffffef),
309
(0x0ffffffffffffffe),
310
(0x0fffffffffffffff),
311
(0x2000000000000000),
312
(0x2000000000000001),
313
(0x2000000000000002),
314
(0x2000000000000300),
315
(0x2000000000000400),
316
(0x2000000000000401),
317
(0x2000000000004001),
318
(0x2000000000040001),
319
(0x2000000000400001),
320
(0x2000000004000001),
321
(0x2000000040000001),
322
(0x2000000400000001),
323
(0x2000004000000001),
324
(0x2000040000000001);
326
SELECT HEX(a) FROM t2 WHERE a IN (0xBB3C3E98175D33C8, 42);
328
SELECT HEX(a) FROM t2 WHERE a IN
336
SELECT HEX(a) FROM t2 WHERE a IN
339
SELECT HEX(a) FROM t2 WHERE a IN
342
SELECT HEX(a) FROM t2 WHERE a IN
347
CREATE TABLE t3 (a BIGINT);
348
INSERT INTO t3 VALUES (9223372036854775551);
350
SELECT HEX(a) FROM t3 WHERE a IN (9223372036854775807, 42);
352
CREATE TABLE t4 (a DATE);
353
INSERT INTO t4 VALUES ('1972-02-06'), ('1972-07-29');
354
SELECT * FROM t4 WHERE a IN ('1972-02-06','19772-07-29');
356
DROP TABLE t1,t2,t3,t4;
359
# BUG#27362: IN with a decimal expression that may return NULL
362
CREATE TABLE t1 (id int not null);
363
INSERT INTO t1 VALUES (1),(2);
365
--error ER_DIVISION_BY_ZERO
366
SELECT id FROM t1 WHERE id IN(4564, (SELECT IF(1=0,1,1/0)) );
370
--echo End of 5.0 tests
374
# Bug#18360: Type aggregation for IN and CASE may lead to a wrong result
376
create TEMPORARY table t1(f1 char(1)) ENGINE=MYISAM;
377
insert into t1 values ('a'),('b'),('1');
378
select f1 from t1 where f1 in ('a',1);
379
select f1, case f1 when 'a' then '+' when 1 then '-' end from t1;
380
create index t1f1_idx on t1(f1);
381
select f1 from t1 where f1 in ('a',1);
382
explain select f1 from t1 where f1 in ('a',1);
383
select f1 from t1 where f1 in ('a','b');
384
explain select f1 from t1 where f1 in ('a','b');
385
select f1 from t1 where f1 in (2,1);
386
explain select f1 from t1 where f1 in (2,1);
387
create TEMPORARY table t2(f2 int, index t2f2(f2)) ENGINE=MYISAM;
388
insert into t2 values(0),(1),(2);
389
select f2 from t2 where f2 in ('a',2);
390
explain select f2 from t2 where f2 in ('a',2);
391
select f2 from t2 where f2 in ('a','b');
392
explain select f2 from t2 where f2 in ('a','b');
393
select f2 from t2 where f2 in (1,'b');
394
explain select f2 from t2 where f2 in (1,'b');
398
# Bug #31075: crash in get_func_mm_tree
401
create table t1 (a datetime, key(a));
402
insert into t1 values (),(),(),(),(),(),(),(),(),();
403
select a from t1 where a not in (a,a,a) group by a;
406
--echo End of 5.1 tests