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

SQLServerANYオペレーターの説明

    SQL Serverでは、ANYを使用できます スカラー値をサブクエリによって返される単一列の値のセットと比較する論理演算子。

    1列の結果セットを持つサブクエリで使用できます。

    ANY 演算子はSOMEと同等です 論理演算子。

    2つのテーブルがあると仮定します。 Cats およびDogs

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 1       | Meow      |
    | 2       | Fluffy    |
    | 3       | Scratch   |
    +---------+-----------+

    +---------+-----------+
    | DogId   | DogName   |
    |---------+-----------|
    | 1       | Fetch     |
    | 2       | Fluffy    |
    | 3       | Wag       |
    +---------+-----------+

    次に、ANYを使用してサブクエリを実行しましょう オペレーター。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName = ANY (SELECT DogName FROM Dogs);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    ANY vs SOME

    SOMEを使用するようにクエリを変更しても、同じ結果が得られます。 ANYの代わりに演算子 。

    ここではSOMEを使用しています ANYの代わりに演算子 。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName = SOME (SELECT DogName FROM Dogs);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    ANY vs IN

    INを使用することもできます 同じ結果を得る演算子。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName IN (SELECT DogName FROM Dogs);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    ANY vs EXISTS

    EXISTSでも同じことができます オペレーター。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
    WHERE c.CatName = d.DogName);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    エラー116?

    ANYを使用しているときにエラー116が発生した場合 、サブクエリで複数の列を選択していることが原因である可能性があります。 ANY 演算子は、結果セットが1列のサブクエリでのみ使用できます。

    このエラーの原因の例を次に示します。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName = ANY (SELECT * FROM Dogs);

    結果:

    Msg 116, Level 16, State 1, Line 5
    Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

    この意味で、ANY 演算子はINに似ています EXISTSよりも演算子 オペレーター。 INでも同じエラーが発生します 。

    サブクエリで複数の列を返す必要がある場合は、EXISTSを使用してください 。


    1. MSSQLServerに接続する際のRODBC一時テーブルの問題

    2. パフォーマンスの神話:文字列列のサイズを大きくする

    3. PostgreSQLデータベースの操作方法

    4. 公式のPostgreSQLDockerイメージの構成ファイルをカスタマイズするにはどうすればよいですか?