1

次の表があります。

w2001

Code  Name    
1     abc
2     xyz
3     pqr
7     OPW

および 2 番目のテーブル:

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

別のデータベースでは、 a を使用して必要な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;

2 つのSELECTステートメントは似ています。結合タイプ以外の他の違いは、最初の戻り値w2001.Nameと 2 番目の戻り値w2011.Nameです。

于 2013-09-29T15:52:53.833 に答える
1

ベンが言ったように、それFULL OUTER JOINはおそらくあなたが求めているものです. table1左側のテーブルと右側のテーブルからすべての行を返しますtable2

FULL OUTER JOINキーワードは、LEFTRIGHTjoinsの両方の結果を結合します。

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 に答える