5
SELECT 1 AS one WHERE 1 IN (SELECT 1);
7
SELECT 1 AS zero WHERE 1 NOT IN (SELECT 1);
9
SELECT 1 AS zero WHERE 1 IN (SELECT 2);
11
-- Set up some simple test tables
13
CREATE TABLE SUBSELECT_TBL (
19
INSERT INTO SUBSELECT_TBL VALUES (1, 2, 3);
20
INSERT INTO SUBSELECT_TBL VALUES (2, 3, 4);
21
INSERT INTO SUBSELECT_TBL VALUES (3, 4, 5);
22
INSERT INTO SUBSELECT_TBL VALUES (1, 1, 1);
23
INSERT INTO SUBSELECT_TBL VALUES (2, 2, 2);
24
INSERT INTO SUBSELECT_TBL VALUES (3, 3, 3);
25
INSERT INTO SUBSELECT_TBL VALUES (6, 7, 8);
26
INSERT INTO SUBSELECT_TBL VALUES (8, 9, NULL);
28
SELECT '' AS eight, * FROM SUBSELECT_TBL;
30
-- Uncorrelated subselects
32
SELECT '' AS two, f1 AS "Constant Select" FROM SUBSELECT_TBL
33
WHERE f1 IN (SELECT 1);
35
SELECT '' AS six, f1 AS "Uncorrelated Field" FROM SUBSELECT_TBL
36
WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL);
38
SELECT '' AS six, f1 AS "Uncorrelated Field" FROM SUBSELECT_TBL
39
WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE
40
f2 IN (SELECT f1 FROM SUBSELECT_TBL));
42
SELECT '' AS three, f1, f2
44
WHERE (f1, f2) NOT IN (SELECT f2, CAST(f3 AS int4) FROM SUBSELECT_TBL
45
WHERE f3 IS NOT NULL);
47
-- Correlated subselects
49
SELECT '' AS six, f1 AS "Correlated Field", f2 AS "Second Field"
50
FROM SUBSELECT_TBL upper
51
WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE f1 = upper.f1);
53
SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field"
54
FROM SUBSELECT_TBL upper
56
(SELECT f2 FROM SUBSELECT_TBL WHERE CAST(upper.f2 AS float) = f3);
58
SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field"
59
FROM SUBSELECT_TBL upper
60
WHERE f3 IN (SELECT upper.f1 + f2 FROM SUBSELECT_TBL
61
WHERE f2 = CAST(f3 AS integer));
63
SELECT '' AS five, f1 AS "Correlated Field"
65
WHERE (f1, f2) IN (SELECT f2, CAST(f3 AS int4) FROM SUBSELECT_TBL
66
WHERE f3 IS NOT NULL);
69
-- Use some existing tables in the regression test
72
SELECT '' AS eight, ss.f1 AS "Correlated Field", ss.f3 AS "Second Field"
74
WHERE f1 NOT IN (SELECT f1+1 FROM INT4_TBL
75
WHERE f1 != ss.f1 AND f1 < 2147483647);
77
select q1, float8(count(*)) / (select count(*) from int8_tbl)
78
from int8_tbl group by q1 order by q1;
81
-- Test cases to catch unpleasant interactions between IN-join processing
82
-- and subquery pullup.
86
(select 1 from tenk1 a
87
where unique1 IN (select hundred from tenk1 b)) ss;
88
select count(distinct ss.ten) from
89
(select ten from tenk1 a
90
where unique1 IN (select hundred from tenk1 b)) ss;
92
(select 1 from tenk1 a
93
where unique1 IN (select distinct hundred from tenk1 b)) ss;
94
select count(distinct ss.ten) from
95
(select ten from tenk1 a
96
where unique1 IN (select distinct hundred from tenk1 b)) ss;
99
-- Test case to catch problems with multiply nested sub-SELECTs not getting
100
-- recalculated properly. Per bug report from Didier Moens.
103
CREATE TABLE orderstest (
104
approver_ref integer,
106
ordercancelled boolean
109
INSERT INTO orderstest VALUES (1, 1, false);
110
INSERT INTO orderstest VALUES (66, 5, false);
111
INSERT INTO orderstest VALUES (66, 6, false);
112
INSERT INTO orderstest VALUES (66, 7, false);
113
INSERT INTO orderstest VALUES (66, 1, true);
114
INSERT INTO orderstest VALUES (66, 8, false);
115
INSERT INTO orderstest VALUES (66, 1, false);
116
INSERT INTO orderstest VALUES (77, 1, false);
117
INSERT INTO orderstest VALUES (1, 1, false);
118
INSERT INTO orderstest VALUES (66, 1, false);
119
INSERT INTO orderstest VALUES (1, 1, false);
121
CREATE VIEW orders_view AS
124
WHEN ord.approver_ref=1 THEN '---' ELSE 'Approved'
127
WHEN ord.ordercancelled
134
WHEN ord.approver_ref=1
142
WHEN ord.ordercancelled
149
WHEN ord.approver_ref=1
158
SELECT * FROM orders_view;
160
DROP TABLE orderstest cascade;