我在Access 2007中工作,對SQL和非常非常小的VBA一無所知。我正在嘗試執行聯合查詢來加入兩個表,並刪除重複項。訪問刪除聯合查詢中重複的某些部分
但是,很多我的重複在一個條目中有信息不在其他。這不是100%確切的重複。
實施例,
第1行:A,B,BLANK
第2行:A,BLANK,C
我希望它MERGE這兩種落得爲A,B,C中的一個排
我在這裏發現了一個類似的問題,但我根本不明白答案。任何幫助將不勝感激。
我在Access 2007中工作,對SQL和非常非常小的VBA一無所知。我正在嘗試執行聯合查詢來加入兩個表,並刪除重複項。訪問刪除聯合查詢中重複的某些部分
但是,很多我的重複在一個條目中有信息不在其他。這不是100%確切的重複。
實施例,
第1行:A,B,BLANK
第2行:A,BLANK,C
我希望它MERGE這兩種落得爲A,B,C中的一個排
我在這裏發現了一個類似的問題,但我根本不明白答案。任何幫助將不勝感激。
我建議這樣的查詢:
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
,但我不能確定。
如果你的第一臺擁有所有關鍵值,那麼你可以做:
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),union
或full outer join
- 所有這些都有助於簡化查詢。
您是否能夠找到解決問題的方法? – paqogomez 2014-10-31 23:15:13
我現在對SQL知之甚少,不知道自己在做什麼。此外,我們正在與數據庫工作方向不同。我真的很感謝你的幫助,有一天我希望能夠理解它:) – msim 2014-11-04 20:51:22
沒問題,我希望你的方向正在遠離訪問。 :)祝你好運。 – paqogomez 2014-11-04 20:52:32