Il semble que le modificateur d'opérateur de comparaison ALL ne fonctionne pas comme prévu. J'utilise Microsoft SQL Server 2008 R2 Management Studio (v10.50.4000.0).Modificateur SQL Server Opérateur Modifier ALL ne fonctionne pas?
declare @AllTest table
(
ID int identity,
Crew int,
Iteration int,
Value varchar(200)
)
insert @AllTest
values
(1, 1, 'a'),
(2, 1, 'b'),
(3, 1, NULL),
(1, 2, 'd'),
(1, 3, 'e'),
(3, 2, NULL),
(2, 2, 'a'),
(2, 3, 'b'),
(1, 4, NULL),
(1, 5, 'f')
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
and Iteration = all(select v from (values (1),(2),(3)) as t(v))
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
and Iteration != all(select v from (values (1),(2),(3)) as t(v))
La requête où 'Iteration = all' ne renvoie aucun résultat mais il le devrait. La requête où 'Iteration! = All' fonctionne correctement. (Cependant, il semble qu'un tel résultat serait plus facilement réalisé par 'Iteration not in' et sans avoir besoin d'une sorte de sous-requête utilisant quelque chose comme Table Value Constructor ou union pour présenter les valeurs.)
semble vraiment bizarre que ALL ne fonctionne pas comme indiqué et qu'une simple expression telle que 'Iteration = all (1,2,3)' ou 'Iteration! = all (1,2,3)' n'est pas valide!
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
and Iteration != all(1,2,3)
Est-ce un problème avec ma version de SQL Server ou que manque-t-il?
Si ALL ne fonctionne pas alors quelle est la meilleure alternative pour construire la requête à se comporter et retourner le résultat qui devrait être produit en utilisant ALL? Je m'excuse de ne pas avoir clarifié ma question en ce qui concerne le résultat escompté. Je cherche un moyen d'avoir seulement un résultat retourné quand il y a des lignes avec la valeur NULL et l'itération égale à 1 et 2 et 3 sans lignes manquantes.
J'espère que cela a du sens.
Aussi, je vois comment 'Iteration = all' cherche une seule ligne, j'ai essayé 'Iteration in all' ce qui aurait plus de sens sémantique mais c'est considéré comme une syntaxe incorrecte.
Vous devez expliquer ce que vous espériez les résultats seraient et pourquoi si vous voulez une alternative, je me fais que vous pourriez vouloir une sorte de requête de division relationnelle. –