SQL Serverでは、SOME
を使用できます スカラー値をサブクエリによって返される単一列の値のセットと比較する論理演算子。
1列の結果セットを持つサブクエリで使用できます。
SOME
演算子はANY
と同等です 論理演算子。
例
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 = SOME (SELECT DogName FROM Dogs);
結果:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
SOME
vs ANY
前述のように、SOME
ANY
と同等です 。
したがって、ANY
を使用するようにクエリを変更できます。 SOME
の代わりに 。
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = ANY (SELECT DogName FROM Dogs);
結果:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
SOME
vs IN
IN
を使用するようにクエリを変更しても、同じ結果が得られます。 SOME
の代わりに演算子 。
ここではIN
を使用しています オペレーター。
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName IN (SELECT DogName FROM Dogs);
結果:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
SOME
vs EXISTS
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?
SOME
の使用時にエラー116が発生した場合 、サブクエリで複数の列を選択していることが原因である可能性があります。 SOME
演算子は、結果セットが1列のサブクエリでのみ使用できます。
このエラーの原因の例を次に示します。
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = SOME (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.
IN
でも同じエラーが発生します 。サブクエリで複数の列を返す必要がある場合は、EXISTS
を使用してください 。