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

Posted

技术标签:

【中文标题】按 ID 和日期将两个表合并为新表【英文标题】:Merging two tables into new table by ID and date 【发布时间】:2015-09-08 08:38:45 【问题描述】:

假设我有两张桌子:

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) 对都是唯一的。我将如何合并这两个表,以生成一个

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

我想把这些表组合成一张大表。因此,新表包含两个表中 a 列和 b 列的值,以及表 1 或表 2 的唯一列。

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

谢谢。

【问题讨论】:

table2和table3有什么不同?您能否编辑您的问题以显示您希望 table3 具有哪些值? 哎呀我的错。表 1 包含需要添加的额外列。让我快速编辑 这是 mysql 还是 SQL Server?请在提交问题之前检查您选择的标签。 【参考方案1】:

您可以在插入表格时使用SELECT 语句。我在这里要做的是编写一个 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;

然后,插入表 3:

INSERT INTO tab3 (mySelect);

这是一个SQL Fiddle 示例。

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

【讨论】:

完美。这就是我想要的。对不起,我对所有与 SQL 相关的东西完全没有经验 @Marcin 没问题,如果您有任何问题,请告诉我。如果您坚持这个答案,请随时接受它,以便未来的读者知道是什么解决了您的问题。 最后一个问题:假设表 1 现在有 > 20 列,并且表 2 也有大量列。但是,同样的方法也适用:通过 col A 和 col B 合并它们,有没有更快的方法来写出来而不是逐列写出来? @Marcin 好吧,您可以使用t1.*, t2.colF, t2.colG 之类的方法来缩短它,但请确保您没有重复的列名,否则您可能会遇到列名不明确的问题。【参考方案2】:

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

作为一个工会:

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`

插入表格放

insert into `table 3`

在它前面。

我希望这会有所帮助。

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

【讨论】:

以上是关于按 ID 和日期将两个表合并为新表的主要内容,如果未能解决你的问题,请参考以下文章

r按两个日期之间的id和日期合并

使用 Jquery 收集数组中的行 ID,然后为新表查询这些值

如何合并列中具有相同值的两个表

MySQL - 如何创建一个新表,该表是两个现有表的主键的连接

power query 根据两个日期之间的事务日期合并两个表

按日期将两个列表合并为一个