2013-09-29 95 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