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

时间:2015-06-22 18:55:45

标签: sql sql-server phpmyadmin

让我说我有两张桌子:

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,所以我不知道它会是什么样子。

谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解这些数据。你是说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相同,则联接将组合数据。我认为后者就是你想要的。我没有全部使用union,因为这可能会产生重复。

答案 1 :(得分: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,则表3中的colF将为空。