按 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 和日期将两个表合并为新表的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jquery 收集数组中的行 ID,然后为新表查询这些值
MySQL - 如何创建一个新表,该表是两个现有表的主键的连接