==== ---- QUERY # Uncorrelated IN subquery select a.id, a.int_col, a.string_col from functional.alltypessmall a where a.id in (select id from functional.alltypestiny where bool_col = false) and a.id < 5 ---- RESULTS 1,1,'1' 3,3,'3' ---- TYPES INT, INT, STRING ==== ---- QUERY # Uncorrelated IN subquery with IS NOT NULL predicate select a.id, a.int_col, a.string_col from functional.alltypes a where a.int_col in (select int_col from functional.alltypesagg where int_col is not null) and a.id < 5 ---- RESULTS 1,1,'1' 2,2,'2' 3,3,'3' 4,4,'4' ---- TYPES INT, INT, STRING ==== ---- QUERY # Uncorrelated IN subquery with IS NULL predicate (empty result) select a.id, a.int_col, a.string_col from functional.alltypes a where a.id in (select int_col from functional.alltypesagg where int_col is null) and a.id < 5 ---- RESULTS ---- TYPES INT, INT, STRING ==== ---- QUERY # Uncorrelated NOT IN subquery select id, year, month from functional.alltypessmall where id not in (select id from functional.alltypestiny where bool_col = false) and id < 5 ---- RESULTS 0,2009,1 2,2009,1 4,2009,1 ---- TYPES INT, INT, INT ==== ---- QUERY # Uncorrelated NOT IN subquery that returns only null values select id from functional.alltypestiny where int_col not in (select int_col from functional.alltypesagg where int_col is null) and id < 10 ---- RESULTS ---- TYPES INT ==== ---- QUERY # Uncorrelated NOT IN subquery that returns null and non-null values select id from functional.alltypestiny where int_col not in (select int_col from functional.alltypesagg) ---- RESULTS ---- TYPES INT ==== ---- QUERY # Uncorrelated NOT IN subquery that returns an empty set # (result should include all the tuples of the outer) select id, int_col from functional.alltypestiny where int_col not in (select int_col from functional.alltypesagg where id < 0) order by id ---- RESULTS 0,0 1,1 2,0 3,1 4,0 5,1 6,0 7,1 ---- TYPES INT, INT ==== ---- QUERY # Outer with nulls and an uncorrelated NOT IN subquery that returns an empty set # (result should include NULLs in int_col) select id, int_col from functional.alltypesagg where int_col not in (select int_col from functional.alltypestiny where id < 0) and id < 5 order by id ---- RESULTS 0,NULL 0,NULL 1,1 2,2 3,3 4,4 ---- TYPES INT, INT ==== ---- QUERY # Outer with NULLS and an uncorrelated NOT IN select id from functional.alltypesagg where int_col is null and int_col not in (select int_col from functional.alltypestiny) ---- RESULTS ---- TYPES INT ==== ---- QUERY # Outer with NULLS and an uncorrelated NOT IN subquery that returns an empty set select id, int_col from functional.alltypesagg where int_col is null and int_col not in (select int_col from functional.alltypestiny where id < 0) and id < 10 order by id ---- RESULTS 0,NULL 0,NULL ---- TYPES INT, INT ==== ---- QUERY # Correlated IN subquery select s.id, s.bool_col, s.int_col, s.date_string_col from functional.alltypessmall s where s.id in (select id from functional.alltypestiny t where t.int_col = s.int_col) and s.bool_col = false ---- RESULTS 1,false,1,'01/01/09' ---- TYPES INT, BOOLEAN, INT, STRING ==== ---- QUERY # Correlated NOT IN subquery select s.id, s.bool_col, s.int_col from functional.alltypessmall s where s.id not in (select id from functional.alltypestiny t where s.int_col = t.int_col and t.bool_col = false) and s.id < 5 order by s.id ---- RESULTS 0,true,0 2,true,2 3,false,3 4,true,4 ---- TYPES INT, BOOLEAN, INT ==== ---- QUERY # Correlated NOT IN subquery that returns an empty set # (results should include all the tuples of the outer that pass # the remaining predicates) select id, int_col from functional.alltypestiny t where t.int_col not in (select int_col from functional.alltypes a where t.id = a.id and a.bigint_col < 0) and id < 5 order by id ---- RESULTS 0,0 1,1 2,0 3,1 4,0 ---- TYPES INT, INT ==== ---- QUERY # Correlated NOT IN subquery that returns nulls select id, int_col from functional.alltypestiny t where t.int_col not in (select int_col from functional.alltypesagg a where int_col is null and a.id = t.id) order by id ---- RESULTS 1,1 2,0 3,1 4,0 5,1 6,0 7,1 ---- TYPES INT, INT ==== ---- QUERY # Outer with nulls and a correlated NOT IN subquery that returns null and # non-null values select id, int_col from functional.alltypesagg a where a.int_col not in (select int_col from functional.alltypesagg b where a.id = b.id) and id < 10 ---- RESULTS ---- TYPES INT, INT ==== ---- QUERY # Outer with nulls and a correlated NOT IN subquery that does not return nulls select id, int_col from functional.alltypesagg a where int_col not in (select int_col from functional.alltypestiny t where a.id = t.id) and bigint_col = 10 order by id ---- RESULTS 1001,1 2001,1 3001,1 4001,1 5001,1 6001,1 7001,1 8001,1 9001,1 ---- TYPES INT, INT ==== ---- QUERY # Correlated NOT IN subquery that returns an empty set select id, int_col, bigint_col from functional.alltypesagg a where int_col not in (select int_col from alltypestiny t where a.id = t.id and t.bigint_col < 0) and bigint_col = 10 order by id ---- RESULTS 1,1,10 1001,1,10 2001,1,10 3001,1,10 4001,1,10 5001,1,10 6001,1,10 7001,1,10 8001,1,10 9001,1,10 ---- TYPES INT, INT, BIGINT ==== ---- QUERY # Outer that has only nulls, correlated NOT IN subquery select id, int_col, bigint_col from alltypesagg a where int_col not in (select int_col from alltypesagg t where a.id = t.id) and int_col is null ---- RESULTS ---- TYPES INT, INT, BIGINT ==== ---- QUERY # Correlated NOT IN subquery (IMPALA-1297) select count(distinct id) from alltypesagg t1 where t1.day not in (select tt1.tinyint_col as tinyint_col_1 from alltypesagg tt1 where t1.smallint_col = tt1.smallint_col) ---- RESULTS 8200 ---- TYPES BIGINT ==== ---- QUERY # Correlated EXISTS subquery select count(*) from functional.alltypestiny t where exists (select * from functional.alltypessmall s where t.int_col = s.int_col) and id < 4 ---- RESULTS 4 ---- TYPES BIGINT ==== ---- QUERY # Correlated NOT EXISTS subquery select id, int_col from functional.alltypessmall t where not exists (select 1 from functional.alltypestiny s where t.id = s.id) and month = 1 and int_col < 5 order by id ---- RESULTS 10,0 11,1 12,2 13,3 14,4 20,0 21,1 22,2 23,3 24,4 ---- TYPES INT, INT ==== ---- QUERY # Uncorrelated EXISTS select id from functional.alltypestiny t where exists (select 1 from functional.alltypessmall where bool_col = false) and bool_col = true order by id ---- RESULTS 0 2 4 6 ---- TYPES INT ==== ---- QUERY # Uncorrelated EXISTS that returns an empty set select 1 from functional.alltypestiny t where exists (select null from functional.alltypessmall where id < 0) and t.id > 0 ---- RESULTS ---- TYPES TINYINT ==== ---- QUERY # Uncorrelated NOT EXISTS select id from functional.alltypestiny t where not exists (select 1 from functional.alltypessmall where bool_col = false) and bool_col = true ---- RESULTS ---- TYPES INT ==== ---- QUERY # Uncorrelated NOT EXISTS that returns an empty set select 1 from functional.alltypestiny t where not exists (select null from functional.alltypessmall where id < 0) and t.id > 0 ---- RESULTS 1 1 1 1 1 1 1 ---- TYPES TINYINT ==== ---- QUERY # Uncorrelated aggregate subquery select count(*) from functional.alltypessmall t where t.id < (select max(id) from functional.alltypestiny) and t.bool_col = true ---- RESULTS 4 ---- TYPES BIGINT ==== ---- QUERY # Uncorrelated aggregate subquery with count select id, int_col, year, month from functional.alltypessmall where int_col = (select count(*) from functional.alltypestiny) order by id ---- RESULTS 8,8,2009,1 18,8,2009,1 33,8,2009,2 43,8,2009,2 58,8,2009,3 68,8,2009,3 83,8,2009,4 93,8,2009,4 ---- TYPES INT, INT, INT, INT ==== ---- QUERY # Correlated aggregate subquery select id, int_col, year, month from functional.alltypessmall s where s.int_col = (select count(*) from functional.alltypestiny t where s.id = t.id) order by id ---- RESULTS 1,1,2009,1 10,0,2009,1 20,0,2009,1 25,0,2009,2 35,0,2009,2 45,0,2009,2 50,0,2009,3 60,0,2009,3 70,0,2009,3 75,0,2009,4 85,0,2009,4 95,0,2009,4 ---- TYPES INT, INT, INT, INT ==== ---- QUERY # Multiple subquery predicates select id, bool_col, int_col, date_string_col from functional.alltypessmall s where s.id in (select id from functional.alltypestiny where bool_col = true) and exists (select * from functional.alltypesagg g where s.int_col = g.int_col and g.bigint_col < 100) and s.int_col < (select count(*) from functional.alltypes where month = 1) ---- RESULTS 2,true,2,'01/01/09' 4,true,4,'01/01/09' 6,true,6,'01/01/09' ---- TYPES INT, BOOLEAN, INT, STRING ==== ---- QUERY # Multiple nesting levels select month, count(*) from functional.alltypessmall s where id in (select id from functional.alltypestiny t where t.int_col < (select min(int_col) from functional.alltypesagg a where a.bool_col = false and exists (select * from functional.alltypes b where b.id = a.id))) group by month ---- RESULTS 1,4 ---- TYPES INT, BIGINT ==== ---- QUERY # Multiple tables in outer select block and in subqueries select t.id, t.month, t.year from functional.alltypestiny t left outer join functional.alltypessmall s on s.id = t.id where t.int_col < (select avg(a.int_col) * 2 from functional.alltypesagg a left outer join functional.alltypes b on a.bigint_col = b.bigint_col where a.id = t.id and b.int_col < 10) order by t.id ---- RESULTS 1,1,2009 2,2,2009 3,2,2009 4,3,2009 5,3,2009 6,4,2009 7,4,2009 ---- TYPES INT, INT, INT ==== ---- QUERY # Subquery in the WITH clause with t as (select * from functional.alltypessmall where id in (select id from functional.alltypestiny where bool_col = false)) select id, month, year from t where t.int_col = (select count(*) from functional.alltypestiny where id < 5) ---- RESULTS 5,1,2009 ---- TYPES INT, INT, INT ==== ---- QUERY # Subquery in an inline view select s.id, s.year from functional.alltypessmall s left outer join (select * from functional.alltypestiny t where t.id in (select id from functional.alltypesagg)) b on (s.id = b.id) where s.int_col < (select max(int_col) from functional.alltypes) and s.id < 10 order by s.id ---- RESULTS 0,2009 1,2009 2,2009 3,2009 4,2009 5,2009 6,2009 7,2009 8,2009 ---- TYPES INT, INT ==== ---- QUERY # Subquery returning a decimal select id, double_col from functional.alltypestiny where double_col < (select min(d3) from functional.decimal_tbl) order by id ---- RESULTS 0,0 2,0 4,0 6,0 ---- TYPES INT, DOUBLE ==== ---- QUERY # Compare a decimal with the result of a subquery select d1, d2, d3 from functional.decimal_tbl where d3 < (select max(double_col) from functional.alltypestiny) ---- RESULTS 1234,2222,1.2345678900 ---- TYPES DECIMAL, DECIMAL, DECIMAL ==== ---- QUERY # Distinct in the outer select block select distinct bool_col from functional.alltypestiny t where 1 < (select count(*) from functional.alltypessmall) ---- RESULTS false true ---- TYPES BOOLEAN ==== ---- QUERY # Distinct with an unqualified star in the outer select block select distinct * from functional.alltypestiny t where 1 < (select avg(distinct id) from functional.alltypessmall) and id < 2 ---- RESULTS 0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1 1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1 ---- TYPES INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT ==== ---- QUERY # Aggregate subquery in an IS NULL predicate select count(*) from functional.alltypestiny where (select max(int_col) from functional.alltypesagg where int_col is null) is null ---- RESULTS 8 ---- TYPES BIGINT ==== ---- QUERY # Aggregate subquery in an IS NOT NULL predicate select count(*) from functional.alltypestiny where (select max(int_col) from functional.alltypesagg where int_col is null) is not null ---- RESULTS 0 ---- TYPES BIGINT ==== ---- QUERY # Correlated aggregate subquery in an IS NULL predicate select id, bool_col from functional.alltypestiny t where (select sum(int_col) from functional.alltypesagg g where t.id = g.id) is null order by id ---- RESULTS 0,true ---- TYPES INT, BOOLEAN ==== ---- QUERY # Correlated aggregate subquery in an IS NOT NULL predicate select id, bool_col from functional.alltypestiny t where (select sum(int_col) from functional.alltypesagg g where t.id = g.id) is not null order by id ---- RESULTS 1,false 2,true 3,false 4,true 5,false 6,true 7,false ---- TYPES INT, BOOLEAN ==== ---- QUERY # Function with a scalar subquery select count(*) from functional.alltypestiny t where zeroifnull((select max(int_col) from functional.alltypesagg where int_col is null)) = 0 ---- RESULTS 8 ---- TYPES BIGINT ==== ---- QUERY # Function with a scalar subquery select id from functional.alltypestiny t where nullifzero((select min(id) from functional.alltypesagg where int_col is null)) is null and id < 5 order by id ---- RESULTS 0 1 2 3 4 ---- TYPES INT ==== ---- QUERY # Between predicate with subqueries select id from functional.alltypessmall where id between (select min(bigint_col) from functional.alltypestiny) and (select max(bigint_col) from functional.alltypestiny) order by id ---- RESULTS 0 1 2 3 4 5 6 7 8 9 10 ---- TYPES INT ==== ---- QUERY # Correlated EXISTS subquery with an analytic function and a group by clause select id, int_col from functional.alltypesagg a where exists (select id, sum(int_col) over (partition by bool_col) from functional.alltypes b where a.id = b.id and b.bigint_col < 100 group by id, int_col, bool_col order by id) and id < 5 order by id ---- RESULTS 0,NULL 0,NULL 1,1 2,2 3,3 4,4 ---- TYPES INT, INT ==== ---- QUERY # Correlated NOT EXISTS subquery with analytic function and group by select id, int_col from alltypestiny t where not exists (select id, sum(int_col) over (partition by bool_col) from alltypesagg a where bool_col = false and t.id = a.int_col group by id, int_col, bool_col having sum(id) = 1) order by id, int_col ---- RESULTS 0,0 2,0 3,1 4,0 5,1 6,0 7,1 ---- TYPES INT, INT ==== ---- QUERY # Testing a crash in the buffered tuple stream related to IMPALA-1306. SELECT COUNT(t1.id) AS int_col_1 FROM alltypes t1 WHERE t1.month IN (SELECT tt1.tinyint_col AS tinyint_col_1 FROM alltypes tt1 WHERE t1.month = tt1.tinyint_col) AND EXISTS (SELECT MIN(tt1.tinyint_col) AS tinyint_col_1 FROM alltypestiny tt1) AND (SELECT t1.year AS int_col_1 FROM alltypes t1 ORDER BY t1.year ASC LIMIT 1) = t1.id ---- RESULTS 1 ---- TYPES BIGINT ==== ---- QUERY # Testing a crash in the buffered tuple stream related to IMPALA-1306. SELECT COUNT(t1.id) AS int_col_1 FROM alltypestiny t1 WHERE t1.month IN (SELECT tt1.tinyint_col AS tinyint_col_1 FROM alltypes tt1 WHERE t1.month = tt1.tinyint_col) AND EXISTS (SELECT MIN(tt1.tinyint_col) AS tinyint_col_1 FROM alltypestiny tt1) AND (SELECT t1.year AS int_col_1 FROM alltypes t1 ORDER BY t1.year ASC LIMIT 1) = t1.id ---- RESULTS 0 ---- TYPES BIGINT ==== ---- QUERY # Regression test for IMPALA-1318. select count(t1.c) over () from (select max(int_col) c from functional.alltypestiny) t1 where t1.c not in (select sum(t1.smallint_col) from functional.alltypes t1) ---- RESULTS 1 ---- TYPES BIGINT ==== ---- QUERY # Regression test for IMPALA-1348. select count(*) FROM alltypesagg t1 WHERE day IS NOT NULL AND t1.int_col NOT IN (SELECT tt1.month AS tinyint_col_1 FROM alltypesagg tt1 LEFT JOIN alltypestiny tt2 ON tt2.year = tt1.id AND t1.bigint_col = tt2.smallint_col) ---- RESULTS 10000 ---- TYPES BIGINT ==== ---- QUERY # WITH definition containing a subquery is used in a UNION WITH foo AS (SELECT 1 FROM alltypestiny WHERE int_col IN (SELECT 1)) SELECT * FROM foo UNION SELECT * FROM foo ---- RESULTS 1 ---- TYPES TINYINT ==== ---- QUERY # Regression test for IMPALA-1365 WITH foo AS (SELECT 1 FROM alltypestiny WHERE int_col IN (SELECT 1)) SELECT * FROM (SELECT * FROM foo UNION SELECT * FROM foo) bar ---- RESULTS 1 ---- TYPES TINYINT ==== ---- QUERY # UNION of query with subquery and various other queries SELECT 1 FROM ALLTYPESTINY WHERE 1 = (SELECT 1) UNION VALUES (2) UNION ALL SELECT 3 ---- RESULTS 1 2 3 ---- TYPES TINYINT ==== ---- QUERY # Correlated NOT EXISTS subquery with an aggregate function (IMPALA-1550) SELECT t1.bigint_col FROM alltypestiny t1 WHERE NOT EXISTS (SELECT SUM(smallint_col) AS int_col FROM alltypestiny WHERE t1.date_string_col = string_col AND t1.timestamp_col = timestamp_col) GROUP BY t1.bigint_col ---- RESULTS ---- TYPES BIGINT ==== ---- QUERY # Correlated EXISTS subquery with an aggregate function (IMPALA-1550) SELECT t1.bigint_col FROM alltypestiny t1 WHERE EXISTS (SELECT SUM(smallint_col) AS int_col FROM alltypestiny WHERE t1.date_string_col = string_col AND t1.timestamp_col = timestamp_col) GROUP BY t1.bigint_col ---- RESULTS 0 10 ---- TYPES BIGINT ==== ---- QUERY # Correlated EXISTS subquery with a having clause (IMPALA-2734) SELECT 1 FROM alltypestiny t1 WHERE EXISTS (SELECT 1 FROM alltypestiny t2 WHERE t1.id = t2.id AND t1.int_col = t2.int_col GROUP BY t2.id HAVING count(1) = 1) ---- RESULTS 1 1 1 1 1 1 1 1 ---- TYPES TINYINT ====