查询返回一个结果集,该结果集由结果集中的列数和每列的数据类型“定义”。
UNION 或 UNION ALL 操作旨在将两个结果集“附加”在一起;为了做到这一点,两个查询的结果集在返回的列数方面必须相同,并且每列的数据类型也必须相同。
有时,当结果集稍微偏离一点时,我们可以稍微捏造查询,以使结果集匹配(添加一些文字作为列占位符)
SELECT 'u' AS source
, u.first_name AS first_name
, u.last_name AS last_name
, u.employid AS employid
, u.manager AS manager
FROM $USER_TABLE u
WHERE u.username='$contextUser'
UNION ALL
SELECT 't' AS source
, t.some_string AS first_name
, t.some_otherstring AS last_name
, 0 AS employid
, 0 AS manager
FROM $TIMES_TABLE t
WHERE t.uid='$contextUser'
AND t.submitstatus=1
请注意,列的名称(或分配给列或表达式的别名)并不重要;这里重要的是两个查询都返回五列,并且每列位置的数据类型匹配:VARCHAR、VARCHAR、VARCHAR、INT、INT
在开发 SQL 语句时,定义要返回的结果集很重要。有多少列,以及每列的数据类型。
在开发使用“UNION”或“UNION ALL”操作的查询时,每个查询的结果集必须匹配。