2013-09-29 93 views
1

不匹配我有如下表:名稱列在查詢

w2001

Code Name  
1  abc 
2  xyz 
3  pqr 
7  OPW 

和第二臺:

w2011

Code Name 
4  abc 
2  xyz 
5  pqr 
6  MNS 

我想以下結果:

Code2001 Code2011 Name 
1   4  abc 
2   2  xyz 
3   5  pqr 
7   -  OPW 
-   6  MNS 

我已經試過此查詢:

select distinct b.name as 2001 
    from w2001 a, w2011 b 
where b.name not in (select a.name from w2001) 

這不起作用,也試過:

select a.code as Code2001 , b.code as Code2011 ,* 
    from w2001 a, w2011 b 
where a.name = b.name 

但這並沒有工作,要麼;我應該如何得到結果?

+0

你有沒有考慮_why_他們沒有工作?附:你正在尋找一個完整的外部聯接; http://dba.stackexchange.com/questions/14441/full-outer-join-in-ms-access – Ben

+0

不支持連接表達式錯誤 –

+0

我100%確定MS-Access 2007支持連接,所以你已經可能會錯誤地增加它......如果你[編輯]你的問題,那麼人們可能會看到和幫助? – Ben

回答

3

與其他數據庫,你可以使用一個FULL OUTER JOIN得到你想要的結果。但是,Access不支持完整連接。幸運的是,您可以通過UNION a LEFT JOINRIGHT JOIN完成相同的操作。

SELECT 
    w2001.Code AS Code2001, 
    w2011.Code AS Code2011, 
    w2001.Name 
FROM 
    w2001 LEFT JOIN w2011 
    ON w2001.Name = w2011.Name 
UNION 
SELECT 
    w2001.Code AS Code2001, 
    w2011.Code AS Code2011, 
    w2011.Name 
FROM 
    w2001 RIGHT JOIN w2011 
    ON w2001.Name = w2011.Name; 

這兩個SELECT聲明是類似的。除聯接類型外,另一個區別是第一個返回w2001.Name,第二個返回w2011.Name

+0

該查詢返回您在Access 2007中從示例數據請求的結果。但是,行順序不一樣。需要更多的工作才能使'Code2001'空排序最後。 – HansUp

1

像本說的那樣,FULL OUTER JOIN可能是你以後的樣子。它返回左表table1和右表table2的所有行。

FULL OUTER JOIN關鍵字結合了LEFTRIGHT連接的結果。

SQL語法FULL OUTER JOIN

SELECT column_name(s) 
FROM table1 
FULL OUTER JOIN table2 
ON table1.column_name=table2.column_name 

所以你的情況你可能需要如下:

SELECT w2001.Code AS Code2001, w2011.Code AS Code2011 
FROM W2001 
FULL OUTER JOIN W2011 
ON W2001.Name = W2011.Name