# 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 IN 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