2

2 つのテーブルを比較して、ルックアップ値が一致しない場合と、他のテーブルのキー値が欠落している場合の一連の結果を取得したいと考えています。最初の部分は、次のクエリで正常に機能します。

SELECT * FROM (
    SELECT  mID, mLookup
    FROM m) t1

FULL OUTER JOIN (
    SELECT  aID, aLookup
    FROM a) t2

ON t1.mID = t2.aID

WHERE
    t1.mID = t2.aID AND
    t1.mLookup <> t2.aLookup

ただし、他のテーブルに対応する ID がない t1 および t2 からの行は返されません ( のためON t1.mID = t2.aID)。

同じクエリで両方を達成するにはどうすればよいですか?

4

3 に答える 3

7

WHERE句の ID 部分を削除します。テーブルをリンクするにはこれFULL OUTER JOIN ON t1.mID = t2.aIDで十分です。FULL OUTER JOIN は、一方が一致しない場合でも、結合内の両方のテーブルを返します。

ただし、WHERE t1.m_ID = t2.aID句は結果を両方のテーブルに存在する ID に制限します。これにより、実質的に が のFULL OUTER JOINように動作しINNER JOINます。

言い換えると:

SELECT * FROM (
    SELECT  mID, mLookup
    FROM m) t1

FULL OUTER JOIN (
    SELECT  aID, aLookup
    FROM a) t2

ON t1.mID = t2.aID

WHERE
    --t1.mID = t2.aID AND -- remove this line
    t1.mLookup <> t2.aLookup

- 編集 -

質問を読み直すと、不一致のみが必要でした。その場合、いずれかの側の ID が NULL である場所を検索する必要があります。

SELECT * FROM (
    SELECT  mID, mLookup
    FROM m) t1

FULL OUTER JOIN (
    SELECT  aID, aLookup
    FROM a) t2

ON t1.mID = t2.aID

WHERE
    t1.mID IS NULL OR
    t2.mID IS NULL OR
    t1.mLookup <> t2.aLookup
于 2013-04-10T13:30:16.133 に答える