SQL Server clause avec plusieurs champs
Est-il possible d'inclure dans un IN
clause de plusieurs champs? Quelque chose comme ce qui suit:
select * from user
where code, userType in ( select code, userType from userType )
Je suis à l'aide de ms sql server 2008
Je sais que cela peut être réalisé avec des jointures et existe, je voulais juste savoir si l'on pouvait seulement être fait avec le IN
clause.
- Le fait que vous vous attendez à deux colonnes d'une table à l'être "DANS" une deuxième table allusion à un schéma de conception dans le besoin de poursuivre la normalisation.
Vous devez vous connecter pour publier un commentaire.
Pas la façon dont vous avez posté. Vous ne pouvez retourner un seul domaine ou type de
IN
de travail.À partir de MSDN (
EN
):Au lieu de
IN
, vous pouvez utiliser unJOIN
à l'aide de deux champs:Vous pouvez utiliser un formulaire comme ceci:
EXISTS
ouJOIN
pour accomplir cette tâche.Seulement avec quelque chose d'horrible, comme
Ensuite, vous avez à gérer les valeurs null et la concaténation des nombres plutôt que de les ajouter, et de moulage, et un code de 12 et un usertype de 3 vs un code de 1 et une usertype de 23 ans, et...
Donc voila: une solution qui n'utilise pas les jointures ou existe.. et tout un tas de raisons pourquoi vous ne devriez pas l'utiliser 😉
|
c'est à direwhere (code + '|' + userType) in ( select code + '|' + userType from userType )
. Mais je suis d'accord c'est pas une bonne solution.Comment à ce sujet à la place:
Vous pouvez soit utiliser les jointures
J'ai dû faire quelque chose de très similaire, mais qui EXISTE n'a pas de travail dans ma situation. Voici ce qui a fonctionné pour moi:
EDIT: Maintenant que je regarde, c'est très proche de @v1v3kn la réponse de
Je ne pense pas que la requête est tout à fait portable,il serait plus sûr d'utiliser quelque chose comme
code
et un autre enregistrement qui correspond à votreuserType
.