22-- UNION (also INTERSECT, EXCEPT)
33--
44-- Simple UNION constructs
5- SELECT 1 AS two UNION SELECT 2;
5+ SELECT 1 AS two UNION SELECT 2 ORDER BY 1 ;
66 two
77-----
88 1
99 2
1010(2 rows)
1111
12- SELECT 1 AS one UNION SELECT 1;
12+ SELECT 1 AS one UNION SELECT 1 ORDER BY 1 ;
1313 one
1414-----
1515 1
@@ -29,72 +29,72 @@ SELECT 1 AS two UNION ALL SELECT 1;
2929 1
3030(2 rows)
3131
32- SELECT 1 AS three UNION SELECT 2 UNION SELECT 3;
32+ SELECT 1 AS three UNION SELECT 2 UNION SELECT 3 ORDER BY 1 ;
3333 three
3434-------
3535 1
3636 2
3737 3
3838(3 rows)
3939
40- SELECT 1 AS two UNION SELECT 2 UNION SELECT 2;
40+ SELECT 1 AS two UNION SELECT 2 UNION SELECT 2 ORDER BY 1 ;
4141 two
4242-----
4343 1
4444 2
4545(2 rows)
4646
47- SELECT 1 AS three UNION SELECT 2 UNION ALL SELECT 2;
47+ SELECT 1 AS three UNION SELECT 2 UNION ALL SELECT 2 ORDER BY 1 ;
4848 three
4949-------
5050 1
5151 2
5252 2
5353(3 rows)
5454
55- SELECT 1.1 AS two UNION SELECT 2.2;
55+ SELECT 1.1 AS two UNION SELECT 2.2 ORDER BY 1 ;
5656 two
5757-----
5858 1.1
5959 2.2
6060(2 rows)
6161
6262-- Mixed types
63- SELECT 1.1 AS two UNION SELECT 2;
63+ SELECT 1.1 AS two UNION SELECT 2 ORDER BY 1 ;
6464 two
6565-----
6666 1.1
6767 2
6868(2 rows)
6969
70- SELECT 1 AS two UNION SELECT 2.2;
70+ SELECT 1 AS two UNION SELECT 2.2 ORDER BY 1 ;
7171 two
7272-----
7373 1
7474 2.2
7575(2 rows)
7676
77- SELECT 1 AS one UNION SELECT 1.0::float8;
77+ SELECT 1 AS one UNION SELECT 1.0::float8 ORDER BY 1 ;
7878 one
7979-----
8080 1
8181(1 row)
8282
83- SELECT 1.1 AS two UNION ALL SELECT 2;
83+ SELECT 1.1 AS two UNION ALL SELECT 2 ORDER BY 1 ;
8484 two
8585-----
8686 1.1
8787 2
8888(2 rows)
8989
90- SELECT 1.0::float8 AS two UNION ALL SELECT 1;
90+ SELECT 1.0::float8 AS two UNION ALL SELECT 1 ORDER BY 1 ;
9191 two
9292-----
9393 1
9494 1
9595(2 rows)
9696
97- SELECT 1.1 AS three UNION SELECT 2 UNION SELECT 3;
97+ SELECT 1.1 AS three UNION SELECT 2 UNION SELECT 3 ORDER BY 1 ;
9898 three
9999-------
100100 1.1
@@ -109,15 +109,15 @@ SELECT 1.1::float8 AS two UNION SELECT 2 UNION SELECT 2.0::float8 ORDER BY 1;
109109 2
110110(2 rows)
111111
112- SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2;
112+ SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2 ORDER BY 1 ;
113113 three
114114-------
115115 1.1
116116 2
117117 2
118118(3 rows)
119119
120- SELECT 1.1 AS two UNION (SELECT 2 UNION ALL SELECT 2);
120+ SELECT 1.1 AS two UNION (SELECT 2 UNION ALL SELECT 2) ORDER BY 1 ;
121121 two
122122-----
123123 1.1
@@ -195,7 +195,8 @@ SELECT f1 AS five FROM FLOAT8_TBL
195195 WHERE f1 BETWEEN -1e6 AND 1e6
196196UNION
197197SELECT f1 FROM INT4_TBL
198- WHERE f1 BETWEEN 0 AND 1000000;
198+ WHERE f1 BETWEEN 0 AND 1000000
199+ ORDER BY 1;
199200 five
200201-----------------------
201202 -1004.3
@@ -260,19 +261,19 @@ ORDER BY 1;
260261--
261262-- INTERSECT and EXCEPT
262263--
263- SELECT q2 FROM int8_tbl INTERSECT SELECT q1 FROM int8_tbl;
264+ SELECT q2 FROM int8_tbl INTERSECT SELECT q1 FROM int8_tbl ORDER BY 1 ;
264265 q2
265266------------------
266- 4567890123456789
267267 123
268+ 4567890123456789
268269(2 rows)
269270
270- SELECT q2 FROM int8_tbl INTERSECT ALL SELECT q1 FROM int8_tbl;
271+ SELECT q2 FROM int8_tbl INTERSECT ALL SELECT q1 FROM int8_tbl ORDER BY 1 ;
271272 q2
272273------------------
274+ 123
273275 4567890123456789
274276 4567890123456789
275- 123
276277(3 rows)
277278
278279SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1;
@@ -297,32 +298,32 @@ SELECT q2 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q1 FROM int8_tbl ORDER BY 1;
297298 4567890123456789
298299(3 rows)
299300
300- SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl;
301+ SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY 1 ;
301302 q1
302303----
303304(0 rows)
304305
305- SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q2 FROM int8_tbl;
306+ SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q2 FROM int8_tbl ORDER BY 1 ;
306307 q1
307308------------------
308- 4567890123456789
309309 123
310+ 4567890123456789
310311(2 rows)
311312
312- SELECT q1 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q2 FROM int8_tbl;
313+ SELECT q1 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q2 FROM int8_tbl ORDER BY 1 ;
313314 q1
314315------------------
316+ 123
315317 4567890123456789
316318 4567890123456789
317- 123
318319(3 rows)
319320
320321SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q1 FROM int8_tbl FOR NO KEY UPDATE;
321322ERROR: FOR NO KEY UPDATE is not allowed with UNION/INTERSECT/EXCEPT
322323--
323324-- Mixed types
324325--
325- SELECT f1 FROM float8_tbl INTERSECT SELECT f1 FROM int4_tbl;
326+ SELECT f1 FROM float8_tbl INTERSECT SELECT f1 FROM int4_tbl ORDER BY 1 ;
326327 f1
327328----
328329 0
@@ -340,30 +341,30 @@ SELECT f1 FROM float8_tbl EXCEPT SELECT f1 FROM int4_tbl ORDER BY 1;
340341--
341342-- Operator precedence and (((((extra))))) parentheses
342343--
343- SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl;
344+ SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl ORDER BY 1 ;
344345 q1
345346-------------------
346- 4567890123456789
347+ -4567890123456789
348+ 123
347349 123
348350 456
349351 4567890123456789
350- 123
351352 4567890123456789
352- - 4567890123456789
353+ 4567890123456789
353354(7 rows)
354355
355- SELECT q1 FROM int8_tbl INTERSECT (((SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl)));
356+ SELECT q1 FROM int8_tbl INTERSECT (((SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) ORDER BY 1 ;
356357 q1
357358------------------
358- 4567890123456789
359359 123
360+ 4567890123456789
360361(2 rows)
361362
362- (((SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl))) UNION ALL SELECT q2 FROM int8_tbl;
363+ (((SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl ORDER BY 1 ))) UNION ALL SELECT q2 FROM int8_tbl;
363364 q1
364365-------------------
365- 4567890123456789
366366 123
367+ 4567890123456789
367368 456
368369 4567890123456789
369370 123
@@ -416,11 +417,11 @@ LINE 1: ... int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1...
416417 ^
417418HINT: There is a column named "q2" in table "*SELECT* 2", but it cannot be referenced from this part of the query.
418419-- But this should work:
419- SELECT q1 FROM int8_tbl EXCEPT (((SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1)));
420+ SELECT q1 FROM int8_tbl EXCEPT (((SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1))) ORDER BY 1 ;
420421 q1
421422------------------
422- 4567890123456789
423423 123
424+ 4567890123456789
424425(2 rows)
425426
426427--
@@ -593,23 +594,27 @@ SELECT * FROM
593594 (SELECT 1 AS t, 2 AS x
594595 UNION
595596 SELECT 2 AS t, 4 AS x) ss
596- WHERE x < 4;
597- QUERY PLAN
598- --------------------------------------------
599- Unique
600- -> Sort
601- Sort Key: (1), (2)
602- -> Append
603- -> Result
604- -> Result
605- One-Time Filter: false
606- (7 rows)
597+ WHERE x < 4
598+ ORDER BY x;
599+ QUERY PLAN
600+ --------------------------------------------------
601+ Sort
602+ Sort Key: (2)
603+ -> Unique
604+ -> Sort
605+ Sort Key: (1), (2)
606+ -> Append
607+ -> Result
608+ -> Result
609+ One-Time Filter: false
610+ (9 rows)
607611
608612SELECT * FROM
609613 (SELECT 1 AS t, 2 AS x
610614 UNION
611615 SELECT 2 AS t, 4 AS x) ss
612- WHERE x < 4;
616+ WHERE x < 4
617+ ORDER BY x;
613618 t | x
614619---+---
615620 1 | 2
@@ -653,24 +658,28 @@ SELECT * FROM
653658 (SELECT 1 AS t, (random()*3)::int AS x
654659 UNION
655660 SELECT 2 AS t, 4 AS x) ss
656- WHERE x > 3;
657- QUERY PLAN
658- ------------------------------------------------------------------------------
659- Subquery Scan on ss
660- Filter: (ss.x > 3)
661- -> Unique
662- -> Sort
663- Sort Key: (1), (((random() * '3'::double precision))::integer)
664- -> Append
665- -> Result
666- -> Result
667- (8 rows)
661+ WHERE x > 3
662+ ORDER BY x;
663+ QUERY PLAN
664+ ------------------------------------------------------------------------------------
665+ Sort
666+ Sort Key: ss.x
667+ -> Subquery Scan on ss
668+ Filter: (ss.x > 3)
669+ -> Unique
670+ -> Sort
671+ Sort Key: (1), (((random() * '3'::double precision))::integer)
672+ -> Append
673+ -> Result
674+ -> Result
675+ (10 rows)
668676
669677SELECT * FROM
670678 (SELECT 1 AS t, (random()*3)::int AS x
671679 UNION
672680 SELECT 2 AS t, 4 AS x) ss
673- WHERE x > 3;
681+ WHERE x > 3
682+ ORDER BY x;
674683 t | x
675684---+---
676685 2 | 4
0 commit comments