2010-10-12 91 views
0

这实际上是a followup from a previous question但它包含不同的信息,所以我决定开始一个新的话题。 摘要:将两个相同的表(实际上是表字段)合并为一个

我有2个表一个TMP_TABLE和一个BKP_TABLE。两者都具有相同的字段结构和相同的数据类型(具有几乎相同的数据)。

假设tmp_table的构造这样

TMP_TABLE 

NAME  PREFIX  PARAMETERS 
data  data  data 
data  data  data 
data  data  data 

和BKP_TABLE看起来像这样

BKP_TABLE 

NAME  PREFIX  PARAMETERS 
data1  data1  data1 
data1  data1  data1 
data1  data1  data1 

是否有可能将这两个表合并成一个看起来像这样

END_RESULTTABLE 


    NAME  PREFIX  PARAMETERS 
    data  data1  data1 
    data  data1  data1 
    data  data1  data1 

正如您所看到的,我希望删除其中一个字段并将其替换为另一个字段。 序列几乎相同,所以我不必担心记录不正确。

A面的问题

目前双方TMP和BKP包含完全相同的数据(113个记录) 当我做这个

SELECT * FROM TMP_TABLE 
UNION ALL 
SELECT * FROM BKP_TABLE 

我得到226为什么会发生这种情况。我认为重复的条目(我可以清楚地看到)不会出现在我的虚拟表格中。

编辑:

我想更换TMP_data的一个领域与BKP_table字段(例如像名)。

+1

目前,它不完全清楚你想要做什么。如何处理一些(简单)现实的数据,而不是仅仅重复使用“数据”这个词? – 2010-10-12 12:44:29

回答

0

假设你的两个表有共同的(如姓名)的关键,你可以这样做:

create table end_resulttable as 
select t.name, t.prefix, b.parameters 
from tmp_table t, bkp_table b 
where t.name = b.name; 

这是你的意思吗?

+0

我也得到了那么多,不幸的是它并没有完全按照我的意愿去做。因为现在它增加了我的记录,所以当我这样做时,我在我的新end_resulttable中得到了113 * 113条记录。我想要的(如果可能的话)实际上只是替换一个数据字段。我会对我的帖子进行编辑。 – jovany 2010-10-12 13:00:15

+0

如果你有113 * 113行,也就是笛卡尔乘积,这意味着你没有指定一个连接条件(在我的答案中是“where t.name = b.name”),或者你加入的列不是一个键,并在所有113行中具有相同的值! – 2010-10-12 13:23:40

+0

你的表格实际上是否有钥匙,或者你是否希望将表格A的第1行与表格B的第1行“对齐”,等等?如果是这样,数据库不会那样工作。 – 2010-10-12 13:28:38

2
UNION ALL 

将来自两个选择(因此ALL)返回所有记录

UNION 

将删除重复

+0

感谢您的回复。联合国遗憾的是我在尝试工会之前尝试过工会。两者都给了我相同的结果。 – jovany 2010-10-12 11:51:40

+0

@jovany,当然是:'UNION'删除*重复*。如果行不完全相同,那么它们不是重复的。 – 2010-10-12 12:07:31

+0

当然,所以对我的眼睛来说,他们可能“看起来”是一样的,但内容方面可能会有些许差异。谢谢。 – jovany 2010-10-12 12:53:56

相关问题