示例 UNION ALL 查询 - Amazon Redshift

示例 UNION ALL 查询

以下示例使用 UNION ALL 运算符,因为需要在结果中保留重复行(如果发现重复行)。对于一系列特定的活动 ID,查询为与每个活动关联的每个销售值返回 0 行或多个行,并为该活动的每个列表返回 0 行或 1 个行。活动 ID 对于 LISTING 和 EVENT 表中的每个行是唯一的,但对于 SALES 表中的活动和列表 ID 的相同组合,可能有多个销售值。

结果集中的第三个列标识行的来源。如果行来自 SALES 表,则在 SALESROW 列中将其标记为“Yes”。(SALESROW 是 SALES.LISTID 的别名。) 如果行来自 LISTING 表,则在 SALESROW 列中将其标记为“No”。

在本示例中,结果集包含针对列表 500,活动 7787 的三个销售行。换而言之,将针对此列表和活动组合执行三个不同的事务。其他两个列表(501 和 502)不生成任何销售值,因此只有查询为这些列表 ID 生成的行来自 LISTING 表 (SALESROW = 'No')。

select eventid, listid, 'Yes' as salesrow from sales where listid in(500,501,502) union all select eventid, listid, 'No' from listing where listid in(500,501,502) order by listid asc; eventid | listid | salesrow ---------+--------+---------- 7787 | 500 | No 7787 | 500 | Yes 7787 | 500 | Yes 7787 | 500 | Yes 6473 | 501 | No 5108 | 502 | No (6 rows)

如果运行不带 ALL 关键字的相同查询,则结果只保留其中一个销售交易。

select eventid, listid, 'Yes' as salesrow from sales where listid in(500,501,502) union select eventid, listid, 'No' from listing where listid in(500,501,502) order by listid asc; eventid | listid | salesrow ---------+--------+---------- 7787 | 500 | No 7787 | 500 | Yes 6473 | 501 | No 5108 | 502 | No (4 rows)