239 lines
3.3 KiB
SQL
239 lines
3.3 KiB
SQL
# name: test/sql/function/generic/test_in.test
|
|
# description: Test IN statement
|
|
# group: [generic]
|
|
|
|
statement ok
|
|
SET default_null_order='nulls_first';
|
|
|
|
statement ok
|
|
CREATE TABLE integers(i INTEGER)
|
|
|
|
statement ok
|
|
INSERT INTO integers VALUES (1), (2), (3), (NULL);
|
|
|
|
query I
|
|
SELECT * FROM integers WHERE i IN (1, 2) ORDER BY i
|
|
----
|
|
1
|
|
2
|
|
|
|
query I
|
|
SELECT * FROM integers WHERE i IN (1, 2, 3, 4, 5, 6, 7, 8) ORDER BY i
|
|
----
|
|
1
|
|
2
|
|
3
|
|
|
|
query IT
|
|
SELECT i, i IN (1, 2, 3, 4, 5, 6, 7, 8) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 1
|
|
3 1
|
|
|
|
query IT
|
|
SELECT i, i NOT IN (1, 3, 4, 5, 6, 7, 8) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 0
|
|
2 1
|
|
3 0
|
|
|
|
query II
|
|
SELECT i, i IN (1, 2, NULL, 4, 5, 6, 7, 8) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 1
|
|
3 NULL
|
|
|
|
query IT
|
|
SELECT i, i IN (i + 1) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 0
|
|
2 0
|
|
3 0
|
|
|
|
query IT
|
|
SELECT i, i IN (i + 1, 42, i) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 1
|
|
3 1
|
|
|
|
query IT
|
|
SELECT i, 1 IN (i - 1, i, i + 1) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 1
|
|
3 0
|
|
|
|
query IT
|
|
SELECT i, 1 NOT IN (i - 1, i, i + 1) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 0
|
|
2 0
|
|
3 1
|
|
|
|
query IT
|
|
SELECT i, i IN (11, 12, 13, 14, 15, 16, 17, 18, 1, i) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 1
|
|
3 1
|
|
|
|
query IT
|
|
SELECT i, i NOT IN (11, 12, 13, 14, 15, 16, 17, 18, 1, i) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 0
|
|
2 0
|
|
3 0
|
|
|
|
query IT
|
|
SELECT i, 1 IN (11, 12, 13, 14, 15, 16, 17, 18, 1, i) FROM integers ORDER BY i
|
|
----
|
|
NULL 1
|
|
1 1
|
|
2 1
|
|
3 1
|
|
|
|
query IT
|
|
SELECT i, 1 NOT IN (11, 12, 13, 14, 15, 16, 17, 18, 1, i) FROM integers ORDER BY i
|
|
----
|
|
NULL 0
|
|
1 0
|
|
2 0
|
|
3 0
|
|
|
|
query IT
|
|
SELECT i, i IN ((SELECT MAX(i) FROM integers), (SELECT MIN(i) FROM integers)) FROM integers ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 0
|
|
3 1
|
|
|
|
query III
|
|
SELECT i, (SELECT MAX(i) FROM integers WHERE i <> i1.i), (SELECT MIN(i) FROM integers WHERE i <= i1.i) FROM integers i1 ORDER BY i
|
|
----
|
|
NULL NULL NULL
|
|
1 3 1
|
|
2 3 1
|
|
3 2 1
|
|
|
|
query IT
|
|
SELECT i, i IN ((SELECT MAX(i) FROM integers WHERE i <> i1.i), (SELECT MIN(i) FROM integers WHERE i <= i1.i)) FROM integers i1 ORDER BY i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 0
|
|
3 0
|
|
|
|
query I
|
|
SELECT 1 IN [1, 2, 3];
|
|
----
|
|
true
|
|
|
|
query I
|
|
SELECT 1 IN [2, 2, 3];
|
|
----
|
|
false
|
|
|
|
statement ok
|
|
PREPARE v1 AS SELECT 1 IN ?
|
|
|
|
query I
|
|
EXECUTE v1([]);
|
|
----
|
|
false
|
|
|
|
query I
|
|
SELECT 1 IN [];
|
|
----
|
|
false
|
|
|
|
query I
|
|
EXECUTE v1([1, 2, 3]);
|
|
----
|
|
true
|
|
|
|
query I
|
|
EXECUTE v1([2, 2, 3]);
|
|
----
|
|
false
|
|
|
|
# Test <expr> IN <column_ref>
|
|
|
|
query I
|
|
with list_provider as (
|
|
select [1, 2] as lst
|
|
)
|
|
SELECT i FROM (
|
|
from integers, list_provider
|
|
) t(i, lst) WHERE i IN lst ORDER BY i
|
|
----
|
|
1
|
|
2
|
|
|
|
query I
|
|
with list_provider as (
|
|
select [1, 2, 3, 4, 5, 6, 7, 8] as lst
|
|
)
|
|
SELECT i FROM (
|
|
from integers, list_provider
|
|
) t(i, lst) WHERE i IN lst ORDER BY i
|
|
----
|
|
1
|
|
2
|
|
3
|
|
|
|
query II
|
|
with list_provider as (
|
|
select [1, 2, 3, 4, 5, 6, 7, 8] as lst
|
|
)
|
|
SELECT i, i IN lst FROM (
|
|
from integers, list_provider
|
|
) t(i, lst) order by i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 1
|
|
3 1
|
|
|
|
query II
|
|
with list_provider as (
|
|
select [1, 3, 4, 5, 6, 7, 8] as lst
|
|
)
|
|
SELECT i, i NOT IN lst FROM (
|
|
from integers, list_provider
|
|
) t(i, lst) order by i
|
|
----
|
|
NULL NULL
|
|
1 0
|
|
2 1
|
|
3 0
|
|
|
|
query II
|
|
with list_provider as (
|
|
select [1, 2, NULL, 4, 5, 6, 7, 8] as lst
|
|
)
|
|
SELECT i, i IN lst FROM (
|
|
from integers, list_provider
|
|
) t(i, lst) order by i
|
|
----
|
|
NULL NULL
|
|
1 1
|
|
2 1
|
|
3 0
|
|
|
|
# ^ Note the '0' on the last row
|
|
# This is different from regular IN behavior
|
|
|