按 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 中为空。
假设我有两个 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 中为空。