In SQL Server kunt u de ANY
logische operator om een scalaire waarde te vergelijken met een reeks waarden met één kolom die door een subquery worden geretourneerd.
Het kan worden gebruikt met subquery's die een resultatenset van één kolom hebben.
De ANY
operator is het equivalent van de SOME
logische operator.
Voorbeeld
Stel dat we twee tabellen hebben; Cats
en Dogs
Katten
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+
Honden
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | +---------+-----------+
Laten we nu een subquery uitvoeren met de ANY
telefoniste.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = ANY (SELECT DogName FROM Dogs);
Resultaat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
ANY
vs SOME
We zouden hetzelfde resultaat krijgen als we de query zouden veranderen zodat deze de SOME
. gebruikt operator in plaats van ANY
.
Hier gebruikt het de SOME
operator in plaats van ANY
.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = SOME (SELECT DogName FROM Dogs);
Resultaat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
ANY
vs IN
We kunnen ook de IN
. gebruiken operator om hetzelfde resultaat te krijgen.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName IN (SELECT DogName FROM Dogs);
Resultaat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
ANY
vs EXISTS
We zouden hetzelfde kunnen doen met de EXISTS
telefoniste.
SELECT
CatId,
CatName
FROM Cats c
WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Resultaat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
Fout 116?
Als je fout 116 krijgt bij het gebruik van ANY
, komt dit waarschijnlijk omdat u meerdere kolommen in uw subquery selecteert. De ANY
operator kan alleen worden gebruikt met subquery's die een resultatenset van één kolom hebben.
Hier is een voorbeeld van hoe we deze fout kunnen veroorzaken.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = ANY (SELECT * FROM Dogs);
Resultaat:
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 die zin is de ANY
operator lijkt meer op de IN
operator dan het is naar de EXISTS
exploitant. We zouden dezelfde fout krijgen met IN
.
Als u meerdere kolommen in uw subquery moet retourneren, gebruikt u EXISTS
.