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

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

4

2 回答 2

3

对于另一个数据库,您可以使用 aFULL OUTER JOIN来获得您想要的结果。但是,Access 不支持完全联接。幸运的是,你可以UNIONLEFT 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

于 2013-09-29T15:52:53.833 回答
1

就像本说的,这FULL OUTER JOIN可能就是你所追求的。table1它返回左表和右表的所有行table2

FULL OUTER JOIN关键字结合了两者的结果和LEFT连接RIGHT

SQLFULL 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
于 2013-09-29T13:25:13.390 回答