@@ -294,6 +294,26 @@ SELECT q2 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q1 FROM int8_tbl;
294
294
4567890123456789
295
295
(3 rows)
296
296
297
+ SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl;
298
+ q1
299
+ ----
300
+ (0 rows)
301
+
302
+ SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q2 FROM int8_tbl;
303
+ q1
304
+ ------------------
305
+ 123
306
+ 4567890123456789
307
+ (2 rows)
308
+
309
+ SELECT q1 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q2 FROM int8_tbl;
310
+ q1
311
+ ------------------
312
+ 123
313
+ 4567890123456789
314
+ 4567890123456789
315
+ (3 rows)
316
+
297
317
--
298
318
-- Mixed types
299
319
--
@@ -312,3 +332,99 @@ SELECT f1 FROM float8_tbl EXCEPT SELECT f1 FROM int4_tbl;
312
332
-1.2345678901234e-200
313
333
(4 rows)
314
334
335
+ --
336
+ -- Operator precedence and (((((extra))))) parentheses
337
+ --
338
+ SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl;
339
+ q1
340
+ -------------------
341
+ 123
342
+ 4567890123456789
343
+ 456
344
+ 4567890123456789
345
+ 123
346
+ 4567890123456789
347
+ -4567890123456789
348
+ (7 rows)
349
+
350
+ SELECT q1 FROM int8_tbl INTERSECT (((SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl)));
351
+ q1
352
+ ------------------
353
+ 123
354
+ 4567890123456789
355
+ (2 rows)
356
+
357
+ (((SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl))) UNION ALL SELECT q2 FROM int8_tbl;
358
+ q1
359
+ -------------------
360
+ 123
361
+ 4567890123456789
362
+ 456
363
+ 4567890123456789
364
+ 123
365
+ 4567890123456789
366
+ -4567890123456789
367
+ (7 rows)
368
+
369
+ SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl;
370
+ q1
371
+ -------------------
372
+ -4567890123456789
373
+ 456
374
+ (2 rows)
375
+
376
+ SELECT q1 FROM int8_tbl UNION ALL (((SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl)));
377
+ q1
378
+ -------------------
379
+ 123
380
+ 123
381
+ 4567890123456789
382
+ 4567890123456789
383
+ 4567890123456789
384
+ -4567890123456789
385
+ 456
386
+ (7 rows)
387
+
388
+ (((SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) EXCEPT SELECT q1 FROM int8_tbl;
389
+ q1
390
+ -------------------
391
+ -4567890123456789
392
+ 456
393
+ (2 rows)
394
+
395
+ --
396
+ -- Subqueries with ORDER BY & LIMIT clauses
397
+ --
398
+ -- In this syntax, ORDER BY/LIMIT apply to the result of the EXCEPT
399
+ SELECT q1,q2 FROM int8_tbl EXCEPT SELECT q2,q1 FROM int8_tbl
400
+ ORDER BY q2,q1;
401
+ q1 | q2
402
+ ------------------+-------------------
403
+ 4567890123456789 | -4567890123456789
404
+ 123 | 456
405
+ (2 rows)
406
+
407
+ -- This should fail, because q2 isn't a name of an EXCEPT output column
408
+ SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1;
409
+ ERROR: Attribute 'q2' not found
410
+ -- But this should work:
411
+ SELECT q1 FROM int8_tbl EXCEPT (((SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1)));
412
+ q1
413
+ ------------------
414
+ 123
415
+ 4567890123456789
416
+ (2 rows)
417
+
418
+ --
419
+ -- New syntaxes (7.1) permit new tests
420
+ --
421
+ (((((select * from int8_tbl)))));
422
+ q1 | q2
423
+ ------------------+-------------------
424
+ 123 | 456
425
+ 123 | 4567890123456789
426
+ 4567890123456789 | 123
427
+ 4567890123456789 | 4567890123456789
428
+ 4567890123456789 | -4567890123456789
429
+ (5 rows)
430
+
0 commit comments