postgresql - 如何在 date 列中查询具有相同架构但不同时间范围的两个 tables

我有两个 tables:

main_products
old_products

它们具有相同的信息和架构,只有一个区别:

main_products has min(date) = 2022-01 and max(date) = 2022-05

old_products has min(date) = 2020-01 and max(date) = 2020-12

如何查询从 main_products 获取 old_products + all records 的所有记录以获取产品 from 2020-01 to 2022-05

tables 上的产品有和 product_id 字段。

我试图在 product_id 上加入两个 tables 但输出是一个具有两倍列数的 table。

select t1.*, t2.* from t1
inner join t2
one t1.product_id = t2.product_id

回答1

我认为您正在寻找 UNIONUNION ALL

SELECT *
FROM t1
WHERE ...
UNION ALL
SELECT *
FROM t2
WHERE ...

如果 t1 和 t2 中的列相同(相同的列数和相同的类型),这将从它们中提取数据。如果要删除重复项,请使用 UNION 或使用 UNION ALL 包含重复项。 (在您的情况下,它不会产生功能差异,因为 tables 不会与 date 重叠,但 UNION ALL 会更快。)

在上面的示例中,您可以将您的条件(仅获取 2022-01 到 2022-05)放在两个 WHERE 条件中。如果您不喜欢重复条件,可以在子查询中使用 UNION ALL 查询,条件在外部:

SELECT *
FROM
(
 SELECT *
 FROM t1
 UNION ALL
 SELECT *
 FROM t2
) sq
WHERE ...