File: test_scalar_subquery.test

package info (click to toggle)
duckdb 1.5.1-3
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 564
file content (163 lines) | stat: -rw-r--r-- 2,615 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# name: test/sql/subquery/scalar/test_scalar_subquery.test
# description: Test subqueries
# group: [scalar]

statement ok
PRAGMA enable_verification

query I
SELECT 1+(SELECT 1)
----
2

query T
SELECT 1=(SELECT 1)
----
1

query T
SELECT 1<>(SELECT 1)
----
0

query T
SELECT 1=(SELECT NULL)
----
NULL

query T
SELECT NULL=(SELECT 1)
----
NULL

# scalar subquery
query I
SELECT (SELECT 42)
----
42

# nested subquery
query I
SELECT (SELECT (SELECT 42))
----
42

# test aliasing of subquery
query I
SELECT * FROM (SELECT 42) v1(a);
----
42

# not enough aliases: defaults to using names for missing columns
query II
SELECT * FROM (SELECT 42, 41 AS x) v1(a);
----
42	41

# too many aliases: fails
statement error
SELECT * FROM (SELECT 42, 41 AS x) v1(a, b, c);
----

statement ok
CREATE TABLE test (a INTEGER, b INTEGER);

statement ok
INSERT INTO test VALUES (11, 22)

statement ok
INSERT INTO test VALUES (12, 21)

statement ok
INSERT INTO test VALUES (13, 22)

# select single tuple only in scalar subquery
statement error
SELECT (SELECT a * 42 FROM test)
----
More than one row returned by a subquery used as an expression

statement ok
SET scalar_subquery_error_on_multiple_rows=false

query I
SELECT (SELECT a * 42 FROM test)
----
462

# operations on subquery
query I
SELECT a*(SELECT 42) FROM test
----
462
504
546

statement ok
CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER, e INTEGER)

statement ok
INSERT INTO t1(e,c,b,d,a) VALUES(103,102,100,101,104)

statement ok
INSERT INTO t1(a,c,d,e,b) VALUES(107,106,108,109,105)

query R
SELECT c-(SELECT sum(c) FROM t1) FROM t1
----
-106.000000
-102.000000

query I
SELECT CASE WHEN c>(SELECT sum(c)/count(*) FROM t1) THEN a*2 ELSE b*10 END FROM t1
----
1000
214

# correlated subqueries
query IR
SELECT a, (SELECT SUM(b) FROM test tsub WHERE test.a=tsub.a) FROM test
----
11	22.000000
12	21.000000
13	22.000000

query II
SELECT a, (SELECT CASE WHEN test.a=11 THEN 22 ELSE NULL END) FROM test ORDER BY a
----
11	22
12	NULL
13	NULL

query II
SELECT a, (SELECT CASE WHEN test.a=11 THEN b ELSE NULL END FROM test tsub) FROM test ORDER BY a
----
11	22
12	NULL
13	NULL

query II
SELECT a, (SELECT CASE WHEN test.a=11 THEN b ELSE NULL END FROM test tsub LIMIT 1) FROM test ORDER BY a
----
11	22
12	NULL
13	NULL

query II
SELECT * from test where a=(SELECT MIN(a) FROM test t WHERE t.b=test.b) ORDER BY a
----
11	22
12	21

# exists / in / any subqueries
query II
SELECT * FROM test WHERE EXISTS (SELECT a FROM test ts WHERE ts.a = test.a AND b>21)
----
11	22
13	22

# duplicate name in subquery
query II
SELECT * FROM (SELECT 42 AS a, 44 AS a) tbl1
----
42	44