我有两个 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
我认为您正在寻找 UNION
或 UNION 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 ...