按 ID 和日期将两个 table 合并为新的 table

Merging two tables into new table by ID and date

假设我有两个 tables:

table 1:

col a | col b | col c
1     | 62215 | 21
1     | 62015 | 22
2     | 62215 | 23
2     | 51315 | 24


and table 2:
col a | col b| col f
1     | 62015| z
1     | 62215| x
2     | 51315| y
2     | 62215| t

a 列和 b 列本身都不是唯一的,但是 (col a, col b) 对都是唯一的。我将如何合并这两个 tables,产生一个

Table 3:
col a | col b| col c | col f

我想把这些table组合成一个大的table。因此,新的 table 具有来自两个 table 的 a 列和 b 列的值,以及 table 1 或两个唯一的列。

我确信这是一个使用 MERGE 或 UNION 的非常简单的问题,但我根本不使用 SQL,所以我不知道它会是什么样子。

谢谢。

我不确定我是否理解这些数据。您是说 colA 和 colB 在 table 中是唯一的吗?你想加入还是工会?

作为工会:

Select `col a`,`col b`, `col c`, null 
from `table 1`
union
Select `col a`,`col b`, null, `col f`
from `table 2`

作为连接:

Select `table 1`.`col a`,`table 1`.`col b`,`table 1`.`col c`,`table 2`.`col f`
from `table 1` join `table2` 
on `table 1`.`col a` = `table 1`.`col a`
on `table 1`.`col b` = `table 1`.`col b`

插入 table 放入

insert into `table 3`

前面。

希望对您有所帮助。

合并将为 table 1 和 2 中的每条记录生成 1 条记录。如果两个 table 中的 col a 和 col b 相同,则联接将合并数据。我认为后者是你想要的。我没有使用 union all 因为这可能会产生重复。

插入 table 时可以使用 SELECT 语句。我在这里要做的是编写一个 select 语句,首先提取您需要的所有列。您将必须执行完整的外部联接(由左右联接的并集模拟),因为一些对可能存在于一个 table 中,但不存在于另一个中。 select 看起来像这样:

SELECT t1.colA, t1.colB, t1.colC, t2.colF
FROM tab1 t1
LEFT JOIN tab2 t2 ON t2.colA = t1.colA AND t2.colB = t1.colB
UNION
SELECT t1.colA, t1.colB, t1.colC, t2.colF
FROM tab1 t1
RIGHT JOIN tab2 t2 ON t2.colA = t1.colA AND t2.colB = t1.colB;

然后,插入 table 3:

INSERT INTO tab3 (mySelect);

这是一个 SQL Fiddle 示例。

请注意,对于存在于一个 table 而不是另一个中的对,您将获得 NULL 值。例如,如果 table 1 中存在一行而不是 table 2,则 colF 将在 table 3 中为空。