sql >> データベース >  >> RDS >> Sqlserver

SQLServerで左アンチセミ結合を実行する方法

    LEFT ANTI SEMI JOIN は、右側の行セットに一致する行がない左側の行セットの個別の行のみを返す結合のタイプです。

    ただし、SQL ServerでT-SQLを使用する場合、LEFT ANTI SEMI JOINを明示的に使用しようとすると クエリで、おそらく次のエラーが発生します:

    Msg 155, Level 15, State 1, Line 4
    'ANTI' is not a recognized join option.

    幸い、SQLServerにはEXCEPTが含まれています LEFT ANTI SEMI JOINを実行できる演算子 。

    EXCEPTを使用する場合 演算子の場合、クエリ実行プランではLEFT ANTI SEMI JOINとして表示されます。 。

    同じことを行うサブクエリを作成することもできます。

    2つのテーブルがあると想像してください。 Cats およびDogs 、次に次のクエリを実行します:

    SELECT 
        CatName AS PetName
    FROM Cats
    EXCEPT
    SELECT 
        DogName AS PetName
    FROM Dogs;

    このクエリはEXCEPTを使用します 演算子を入力すると、LEFT ANTI SEMI JOINとして表示されます。 実行計画で。

    次のようにするのと似ています:

    SELECT 
        DISTINCT CatName
    FROM Cats c 
    WHERE NOT EXISTS (SELECT DogName FROM Dogs d
    WHERE c.CatName = d.DogName);

    そのクエリの実行プランは次のとおりです。

    Azure Data Lake AnalyticsでU-SQLを使用する場合は、ANTISEMIJOINを使用できます。 左右の反半結合を行う句。つまり、LEFT ANTISEMIJOINを使用できます またはRIGHT ANTISEMIJOIN


    1. 各グループの上位の結果を取得する(Oracleの場合)

    2. テキストファイルソースの接続文字列パラメータ

    3. ストアドプロシージャ内からの結果セットへのアクセスTransact-SQLSQLServer

    4. Oracleのvarchar2列のアクセント付き文字を置き換える方法