名称列在查询中不匹配

时间:2013-09-29 07:57:30

标签: sql ms-access ms-access-2007 union

我有以下表格:

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

但这也不起作用;我应该如何得到结果?

2 个答案:

答案 0 :(得分:3)

使用其他数据库,您可以使用FULL OUTER JOIN来获得所需的结果。但是,Access不支持完全连接。幸运的是,您可UNION LEFT JOIN RIGHT 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

答案 1 :(得分:1)

像Ben说的那样,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