2

最初の簡単な説明: 私は実際に 4 つのテーブルを扱っており、さまざまな場所からデータをマイニングしていますが、私の問題はこの一見単純な概念に帰着します。はい、私はこれに非常に慣れていません...

2 つのテーブル (1 つと 2 つ) があり、両方に ID 列があります。両方ではなく、テーブル 2 のみにある ID 列のみをクエリしたい。のように..

Select ID
From dbo.one, dbo.two
Where dbo.two != dbo.one

私は実際にこれがうまくいくと思っていましたが、奇妙な結果を得ています。誰でも助けることができますか?

4

2 に答える 2

2
SELECT t2.ID
    FROM dbo.two t2
    WHERE NOT EXISTS(SELECT NULL
                         FROM dbo.one t1
                         WHERE t2.ID = t1.ID)

これは、次のようにして行うこともできますLEFT JOIN

SELECT t2.ID
    FROM dbo.two t2
        LEFT JOIN dbo.one t1
            ON t2.ID = t1.ID
    WHERE t1.ID IS NULL
于 2011-08-08T16:33:49.570 に答える
2

ジョーの答えの後に他の2つのオプションを完成させます...

SELECT id
FROM dbo.two
EXCEPT
SELECT id
FROM dbo.one

SELECT t2.ID
FROM dbo.two t2
WHERE t2.ID NOT IN (SELECT t1.ID FROM dbo.one t1)

注: LEFT JOIN は他の 3 つよりも遅くなりますが、これらはすべて同じプランを提供するはずです。

これは、LEFT JOIN が結合の後にフィルターが続き、他の 3 つは準結合であるためです。

于 2011-08-08T16:39:58.333 に答える