Back to home page

OSCL-LXR

 
 

    


0001 -- A test suite for set-operations in parent side, subquery, and both predicate subquery
0002 -- It includes correlated cases.
0003 
0004 create temporary view t1 as select * from values
0005   ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:00:00.000', date '2014-04-04'),
0006   ("val1b", 8S, 16, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04'),
0007   ("val1a", 16S, 12, 21L, float(15.0), 20D, 20E2BD, timestamp '2014-06-04 01:02:00.001', date '2014-06-04'),
0008   ("val1a", 16S, 12, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-07-04 01:01:00.000', date '2014-07-04'),
0009   ("val1c", 8S, 16, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.001', date '2014-05-05'),
0010   ("val1d", null, 16, 22L, float(17.0), 25D, 26E2BD, timestamp '2014-06-04 01:01:00.000', null),
0011   ("val1d", null, 16, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-07-04 01:02:00.001', null),
0012   ("val1e", 10S, null, 25L, float(17.0), 25D, 26E2BD, timestamp '2014-08-04 01:01:00.000', date '2014-08-04'),
0013   ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-09-04 01:02:00.001', date '2014-09-04'),
0014   ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'),
0015   ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'),
0016   ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04')
0017   as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i);
0018 
0019 create temporary view t2 as select * from values
0020   ("val2a", 6S, 12, 14L, float(15), 20D, 20E2BD, timestamp '2014-04-04 01:01:00.000', date '2014-04-04'),
0021   ("val1b", 10S, 12, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04'),
0022   ("val1b", 8S, 16, 119L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'),
0023   ("val1c", 12S, 16, 219L, float(17), 25D, 26E2BD, timestamp '2016-05-04 01:01:00.000', date '2016-05-04'),
0024   ("val1b", null, 16, 319L, float(17), 25D, 26E2BD, timestamp '2017-05-04 01:01:00.000', null),
0025   ("val2e", 8S, null, 419L, float(17), 25D, 26E2BD, timestamp '2014-06-04 01:01:00.000', date '2014-06-04'),
0026   ("val1f", 19S, null, 519L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04'),
0027   ("val1b", 10S, 12, 19L, float(17), 25D, 26E2BD, timestamp '2014-06-04 01:01:00.000', date '2014-06-04'),
0028   ("val1b", 8S, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-07-04 01:01:00.000', date '2014-07-04'),
0029   ("val1c", 12S, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-08-04 01:01:00.000', date '2014-08-05'),
0030   ("val1e", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'),
0031   ("val1f", 19S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'),
0032   ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', null)
0033   as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i);
0034 
0035 create temporary view t3 as select * from values
0036   ("val3a", 6S, 12, 110L, float(15), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.000', date '2014-04-04'),
0037   ("val3a", 6S, 12, 10L, float(15), 20D, 20E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
0038   ("val1b", 10S, 12, 219L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
0039   ("val1b", 10S, 12, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
0040   ("val1b", 8S, 16, 319L, float(17), 25D, 26E2BD, timestamp '2014-06-04 01:02:00.000', date '2014-06-04'),
0041   ("val1b", 8S, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-07-04 01:02:00.000', date '2014-07-04'),
0042   ("val3c", 17S, 16, 519L, float(17), 25D, 26E2BD, timestamp '2014-08-04 01:02:00.000', date '2014-08-04'),
0043   ("val3c", 17S, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:02:00.000', date '2014-09-05'),
0044   ("val1b", null, 16, 419L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:02:00.000', null),
0045   ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-11-04 01:02:00.000', null),
0046   ("val3b", 8S, null, 719L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'),
0047   ("val3b", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:02:00.000', date '2015-05-04')
0048   as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i);
0049 
0050 -- correlated IN subquery
0051 -- UNION, UNION ALL, UNION DISTINCT, INTERSECT and EXCEPT in the parent
0052 -- TC 01.01
0053 SELECT t2a,
0054        t2b,
0055        t2c,
0056        t2h,
0057        t2i
0058 FROM   (SELECT *
0059         FROM   t2
0060         WHERE  t2a IN (SELECT t1a
0061                        FROM   t1)
0062         UNION ALL
0063         SELECT *
0064         FROM   t3
0065         WHERE  t3a IN (SELECT t1a
0066                        FROM   t1)) AS t3
0067 WHERE  t2i IS NOT NULL AND
0068        2 * t2b = t2c
0069 ORDER  BY t2c DESC nulls first;
0070 
0071 -- TC 01.02
0072 SELECT t2a,
0073        t2b,
0074        t2d,
0075        Count(DISTINCT( t2h )),
0076        t2i
0077 FROM   (SELECT *
0078         FROM   t2
0079         WHERE  t2a IN (SELECT t1a
0080                        FROM   t1
0081                        WHERE  t2b = t1b)
0082         UNION
0083         SELECT *
0084         FROM   t1
0085         WHERE  t1a IN (SELECT t3a
0086                        FROM   t3
0087                        WHERE  t1c = t3c)) AS t3
0088 GROUP  BY t2a,
0089           t2b,
0090           t2d,
0091           t2i
0092 ORDER  BY t2d DESC;
0093 
0094 -- TC 01.03
0095 SELECT t2a,
0096        t2b,
0097        t2c,
0098        Min(t2d)
0099 FROM   t2
0100 WHERE  t2a IN (SELECT t1a
0101                FROM   t1
0102                WHERE  t1b = t2b)
0103 GROUP BY t2a, t2b, t2c
0104 UNION ALL
0105 SELECT t2a,
0106        t2b,
0107        t2c,
0108        Max(t2d)
0109 FROM   t2
0110 WHERE  t2a IN (SELECT t1a
0111                FROM   t1
0112                WHERE  t2c = t1c)
0113 GROUP BY t2a, t2b, t2c
0114 UNION
0115 SELECT t3a,
0116        t3b,
0117        t3c,
0118        Min(t3d)
0119 FROM   t3
0120 WHERE  t3a IN (SELECT t2a
0121                FROM   t2
0122                WHERE  t3c = t2c)
0123 GROUP BY t3a, t3b, t3c
0124 UNION DISTINCT
0125 SELECT t1a,
0126        t1b,
0127        t1c,
0128        Max(t1d)
0129 FROM   t1
0130 WHERE  t1a IN (SELECT t3a
0131                FROM   t3
0132                WHERE  t3d = t1d)
0133 GROUP BY t1a, t1b, t1c;
0134 
0135 -- TC 01.04
0136 SELECT DISTINCT( t2a ),
0137                t2b,
0138                Count(t2c),
0139                t2d,
0140                t2h,
0141                t2i
0142 FROM   t2
0143 WHERE  t2a IN (SELECT t1a
0144                FROM   t1
0145                WHERE  t1b = t2b)
0146 GROUP  BY t2a,
0147           t2b,
0148           t2c,
0149           t2d,
0150           t2h,
0151           t2i
0152 UNION
0153 SELECT DISTINCT( t2a ),
0154                t2b,
0155                Count(t2c),
0156                t2d,
0157                t2h,
0158                t2i
0159 FROM   t2
0160 WHERE  t2a IN (SELECT t1a
0161                FROM   t1
0162                WHERE  t2c = t1c)
0163 GROUP  BY t2a,
0164           t2b,
0165           t2c,
0166           t2d,
0167           t2h,
0168           t2i
0169 HAVING t2b IS NOT NULL;
0170 
0171 -- TC 01.05
0172 SELECT t2a,
0173                t2b,
0174                Count(t2c),
0175                t2d,
0176                t2h,
0177                t2i
0178 FROM   t2
0179 WHERE  t2a IN (SELECT DISTINCT(t1a)
0180                FROM   t1
0181                WHERE  t1b = t2b)
0182 GROUP  BY t2a,
0183           t2b,
0184           t2c,
0185           t2d,
0186           t2h,
0187           t2i
0188 
0189 UNION
0190 SELECT DISTINCT( t2a ),
0191                t2b,
0192                Count(t2c),
0193                t2d,
0194                t2h,
0195                t2i
0196 FROM   t2
0197 WHERE  t2b IN (SELECT Max(t1b)
0198                FROM   t1
0199                WHERE  t2c = t1c)
0200 GROUP  BY t2a,
0201           t2b,
0202           t2c,
0203           t2d,
0204           t2h,
0205           t2i
0206 HAVING t2b IS NOT NULL
0207 UNION DISTINCT
0208 SELECT t2a,
0209        t2b,
0210        t2c,
0211        t2d,
0212        t2h,
0213        t2i
0214 FROM   t2
0215 WHERE  t2d IN (SELECT min(t1d)
0216                FROM   t1
0217                WHERE  t2c = t1c);
0218 
0219 -- TC 01.06
0220 SELECT t2a,
0221        t2b,
0222        t2c,
0223        t2d
0224 FROM   t2
0225 WHERE  t2a IN (SELECT t1a
0226                FROM   t1
0227                WHERE  t1b = t2b AND
0228                       t1d < t2d)
0229 INTERSECT
0230 SELECT t2a,
0231        t2b,
0232        t2c,
0233        t2d
0234 FROM   t2
0235 WHERE  t2b IN (SELECT Max(t1b)
0236                FROM   t1
0237                WHERE  t2c = t1c)
0238 EXCEPT
0239 SELECT t2a,
0240        t2b,
0241        t2c,
0242        t2d
0243 FROM   t2
0244 WHERE  t2d IN (SELECT Min(t3d)
0245                FROM   t3
0246                WHERE  t2c = t3c)
0247 UNION ALL
0248 SELECT t2a,
0249        t2b,
0250        t2c,
0251        t2d
0252 FROM   t2
0253 WHERE  t2c IN (SELECT Max(t1c)
0254                FROM   t1
0255                WHERE t1d = t2d);
0256 
0257 -- UNION, UNION ALL, UNION DISTINCT, INTERSECT and EXCEPT in the subquery
0258 -- TC 01.07
0259 SELECT DISTINCT(t1a),
0260        t1b,
0261        t1c,
0262        t1d
0263 FROM   t1
0264 WHERE  t1a IN (SELECT t3a
0265                FROM   (SELECT t2a t3a
0266                        FROM   t2
0267                        UNION ALL
0268                        SELECT t2a t3a
0269                        FROM   t2) AS t3
0270                UNION
0271                SELECT t2a
0272                FROM   (SELECT t2a
0273                        FROM   t2
0274                        WHERE  t2b > 6
0275                        UNION
0276                        SELECT t2a
0277                        FROM   t2
0278                        WHERE  t2b > 6) AS t4
0279                UNION DISTINCT
0280                SELECT t2a
0281                FROM   (SELECT t2a
0282                        FROM   t2
0283                        WHERE  t2b > 6
0284                        UNION DISTINCT
0285                        SELECT t1a
0286                        FROM   t1
0287                        WHERE  t1b > 6) AS t5)
0288 GROUP BY t1a, t1b, t1c, t1d
0289 HAVING t1c IS NOT NULL AND t1b IS NOT NULL
0290 ORDER BY t1c DESC, t1a DESC;
0291 
0292 -- TC 01.08
0293 SELECT t1a,
0294        t1b,
0295        t1c
0296 FROM   t1
0297 WHERE  t1b IN (SELECT t2b
0298                FROM   (SELECT t2b
0299                        FROM   t2
0300                        WHERE  t2b > 6
0301                        INTERSECT
0302                        SELECT t1b
0303                        FROM   t1
0304                        WHERE  t1b > 6) AS t3
0305                WHERE  t2b = t1b);
0306 
0307 -- TC 01.09
0308 SELECT t1a,
0309        t1b,
0310        t1c
0311 FROM   t1
0312 WHERE  t1h IN (SELECT t2h
0313                FROM   (SELECT t2h
0314                        FROM   t2
0315                        EXCEPT
0316                        SELECT t3h
0317                        FROM   t3) AS t3)
0318 ORDER BY t1b DESC NULLs first, t1c  DESC NULLs last;
0319 
0320 -- UNION, UNION ALL, UNION DISTINCT, INTERSECT and EXCEPT in the parent and subquery
0321 -- TC 01.10
0322 SELECT t1a,
0323        t1b,
0324        t1c
0325 FROM   t1
0326 WHERE  t1b IN
0327        (
0328               SELECT t2b
0329               FROM   (
0330                             SELECT t2b
0331                             FROM   t2
0332                             WHERE  t2b > 6
0333                             INTERSECT
0334                             SELECT t1b
0335                             FROM   t1
0336                             WHERE  t1b > 6) AS t3)
0337 UNION DISTINCT
0338 SELECT t1a,
0339        t1b,
0340        t1c
0341 FROM   t1
0342 WHERE  t1b IN
0343        (
0344               SELECT t2b
0345               FROM   (
0346                             SELECT t2b
0347                             FROM   t2
0348                             WHERE  t2b > 6
0349                             EXCEPT
0350                             SELECT t1b
0351                             FROM   t1
0352                             WHERE  t1b > 6) AS t4
0353               WHERE  t2b = t1b)
0354 ORDER BY t1c DESC NULLS last, t1a DESC;
0355 
0356 -- TC 01.11
0357 SELECT *
0358 FROM   (SELECT *
0359         FROM   (SELECT *
0360                 FROM   t2
0361                 WHERE  t2h IN (SELECT t1h
0362                                FROM   t1
0363                                WHERE  t1a = t2a)
0364                 UNION DISTINCT
0365                 SELECT *
0366                 FROM   t1
0367                 WHERE  t1h IN (SELECT t3h
0368                                FROM   t3
0369                                UNION
0370                                SELECT t1h
0371                                FROM   t1)
0372                 UNION
0373                 SELECT *
0374                 FROM   t3
0375                 WHERE  t3a IN (SELECT t2a
0376                                FROM   t2
0377                                UNION ALL
0378                                SELECT t1a
0379                                FROM   t1
0380                                WHERE  t1b > 0)
0381                INTERSECT
0382                SELECT *
0383                FROM   T1
0384                WHERE  t1b IN (SELECT t3b
0385                               FROM   t3
0386                               UNION DISTINCT
0387                               SELECT t2b
0388                               FROM   t2
0389                                )
0390               EXCEPT
0391               SELECT *
0392               FROM   t2
0393               WHERE  t2h IN (SELECT t1i
0394                              FROM   t1)) t4
0395         WHERE  t4.t2b IN (SELECT Min(t3b)
0396                           FROM   t3
0397                           WHERE  t4.t2a = t3a));
0398 
0399 -- UNION, UNION ALL, UNION DISTINCT, INTERSECT and EXCEPT for NOT IN
0400 -- TC 01.12
0401 SELECT t2a,
0402        t2b,
0403        t2c,
0404        t2i
0405 FROM   (SELECT *
0406         FROM   t2
0407         WHERE  t2a NOT IN (SELECT t1a
0408                            FROM   t1
0409                            UNION
0410                            SELECT t3a
0411                            FROM   t3)
0412         UNION ALL
0413         SELECT *
0414         FROM   t2
0415         WHERE  t2a NOT IN (SELECT t1a
0416                            FROM   t1
0417                            INTERSECT
0418                            SELECT t2a
0419                            FROM   t2)) AS t3
0420 WHERE  t3.t2a NOT IN (SELECT t1a
0421                       FROM   t1
0422                       INTERSECT
0423                       SELECT t2a
0424                       FROM   t2)
0425        AND t2c IS NOT NULL
0426 ORDER  BY t2a;
0427 
0428 -- TC 01.13
0429 SELECT   Count(DISTINCT(t1a)),
0430          t1b,
0431          t1c,
0432          t1i
0433 FROM     t1
0434 WHERE    t1b NOT IN
0435          (
0436                 SELECT t2b
0437                 FROM   (
0438                               SELECT t2b
0439                               FROM   t2
0440                               WHERE  t2b NOT IN
0441                                      (
0442                                             SELECT t1b
0443                                             FROM   t1)
0444                               UNION
0445                               SELECT t1b
0446                               FROM   t1
0447                               WHERE  t1b NOT IN
0448                                      (
0449                                             SELECT t3b
0450                                             FROM   t3)
0451                               UNION
0452                                     distinct SELECT t3b
0453                               FROM   t3
0454                               WHERE  t3b NOT IN
0455                                      (
0456                                             SELECT t2b
0457                                             FROM   t2)) AS t3
0458                 WHERE  t2b = t1b)
0459 GROUP BY t1a,
0460          t1b,
0461          t1c,
0462          t1i
0463 HAVING   t1b NOT IN
0464          (
0465                 SELECT t2b
0466                 FROM   t2
0467                 WHERE  t2c IS NULL
0468                 EXCEPT
0469                 SELECT t3b
0470                 FROM   t3)
0471 ORDER BY t1c DESC NULLS LAST, t1i;
0472