Using a UNION
clause in two SELECT
statements how can I guarantee the order of execution?
For example:
SELECT a.poclcdde, a.poclnpol, a.poclcdcl
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLCDCE = 0
AND POCLTPSG = '01'
UNION
SELECT a.poclcdde, a.poclnpol, a.poclcdcl
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLTPSG = '02'
POCLCDDE POCLNPOL POCLCDCL
---------- ---------- ----------
100 1000001 202153
100 5001021 216450
100 9000386 8078
100 9900633 250056
100 9900634 250056
100 9901720 562223
100 9901763 562223
200 1000001 202153
200 5001021 216450
In this case, How can I guarantee that the first records are from query1 and the rest are from query2.
I could use poclcdcl
column (or a virtual column) and then order by that, but in this case I need to get DISTINCT
rows.
SELECT *
FROM (SELECT a.poclcdde,
a.poclnpol,
a.poclcdcl,
1 AS TYPE
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLCDCE = 0
AND POCLTPSG = '01'
UNION
SELECT a.poclcdde,
a.poclnpol,
a.poclcdcl,
2 AS TYPE
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLTPSG = '02')
ORDER BY TYPE
POCLCDDE POCLNPOL POCLCDCL TYPE
---------- ---------- ---------- ----------
200 1000001 202153 1
100 1000001 202153 1
100 9000386 8078 1
100 9900634 250056 2
100 9901720 562223 2
100 9901763 562223 2
200 5001021 216450 2
100 9000386 8078 2
100 5001021 216450 2
100 9900633 250056 2
I need this to interact each row by that order: the first query prevails. Thanks