2014-10-27 63 views
1

我在Access 2007中工作,對SQL和非常非常小的VBA一無所知。我正在嘗試執行聯合查詢來加入兩個表,並刪除重複項。訪問刪除聯合查詢中重複的某些部分

但是,很多我的重複在一個條目中有信息不在其他。這不是100%確切的重複。

實施例,
第1行:A,B,BLANK
第2行:A,BLANK,C

我希望它MERGE這兩種落得爲A,B,C中的一個排

我在這裏發現了一個類似的問題,但我根本不明白答案。任何幫助將不勝感激。

+0

您是否能夠找到解決問題的方法? – paqogomez 2014-10-31 23:15:13

+0

我現在對SQL知之甚少,不知道自己在做什麼。此外,我們正在與數據庫工作方向不同。我真的很感謝你的幫助,有一天我希望能夠理解它:) – msim 2014-11-04 20:51:22

+0

沒問題,我希望你的方向正在遠離訪問。 :)祝你好運。 – paqogomez 2014-11-04 20:52:32

回答

0

我建議這樣的查詢:

select 
    coalesce(t1.a, t2.a) as a, 
    coalesce(t1.b, t2.b) as b, 
    coalesce(t1.c, t2.c) as c 
from 
    table1 t1 
    inner join table2 t2 on t1.key = t2.key 

在這裏,我已經使用了關鍵字​​3210。這將在值列表中取第一個非空值。還請注意,我已經使用key來指示兩行之間的列相同。從你的例子看起來像A,但我不能確定。

+0

謝謝,我是用VBA還是在聯合查詢的SQL視圖中實現這個功能? – msim 2014-10-27 21:53:04

+0

@msim你可以在sql視圖*中用這個代替聯合查詢。 – paqogomez 2014-10-27 21:58:39

+0

我終於有機會嘗試這個了。我是否需要將「t1」和「t2」更改爲表格的名稱?我用A,B,C作爲例子,但是我的字段有名字,所以我需要把它們放在[]括號中?我加入的所有列都是相同的,那麼這會影響關鍵值?對不起,有很多問題,我想更好地瞭解所有這些。再次感謝。 – msim 2014-10-28 20:50:49

0

如果你的第一臺擁有所有關鍵值,那麼你可以做:

select t1.a, nz(t1.b, t2.b), nz(t1.c, t2.c) as c 
from table1 as t1 left join 
    table2 as t2 
    on t1.a = t2.a; 

如果不是這種情況下,你可以使用這個相當神祕的期待構造:

select t1.a, nz(t1.b, t2.b), nz(t1.c, t2.c) as c 
from table1 as t1 left join 
    table2 as t2 
    on t1.a = t2.a 
union all 
select t2.a, t2.b, t2.c 
from table2 as t2 
where not exists (select 1 from table1 as t1 where t1.key = t2.key) 

聯合的第一部分獲取第一個表中存在鍵值的行。第二個獲取鍵值在第二個但不是第一個的行。

注意這在Access中比在其他(比如說「真實」)數據庫中要困難得多。 MS Access不支持子查詢中的公用表表達式(CTE),unionfull outer join - 所有這些都有助於簡化查詢。