# 10.5. UNION
, CASE
, and Related Constructs
SQL UNION
constructs must match up possibly dissimilar
types to become a single result set. The resolution algorithm is
applied separately to each output column of a union query. TheINTERSECT
and EXCEPT
constructs resolve
dissimilar types in the same way as UNION
.
Some other constructs, includingCASE
, ARRAY
, VALUES
,
and the GREATEST
and LEAST
functions, use the identical
algorithm to match up their component expressions and select a result
data type.
Type Resolution for UNION
, CASE
,
and Related Constructs
If all inputs are of the same type, and it is not
unknown
, resolve as that type.If any input is of a domain type, treat it as being of the domain's base type for all subsequent steps. [12]
If all inputs are of type
unknown
, resolve as typetext
(the preferred type of the string category). Otherwise,unknown
inputs are ignored for the purposes of the remaining rules.If the non-unknown inputs are not all of the same type category, fail.
Select the first non-unknown input type as the candidate type, then consider each other non-unknown input type, left to right. [13]If the candidate type can be implicitly converted to the other type, but not vice-versa, select the other type as the new candidate type. Then continue considering the remaining inputs. If, at any stage of this process, a preferred type is selected, stop considering additional inputs.
Convert all inputs to the final candidate type. Fail if there is not an implicit conversion from a given input type to the candidate type.
Some examples follow.
Example 10.10. Type Resolution with Underspecified Types in a Union
SELECT text 'a' AS "text" UNION SELECT 'b';
text