2010-10-12 61 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

相關問題