"Où IN" avec plusieurs colonnes (SQL Server)
Je suis à l'aide de SQL Server 2005.
La requête devrait ressembler à ceci
Select col1, col2, col3 from <subquery> where (col1,col2) in <subquery>
SQL Server n'a pas l'air d'aimer cela. De toute façon de mise en oeuvre de ce que quelqu'un sait de qui n'implique pas de conversion à varchars ou autre chose malpropre?
C'est le réel de la requête.
SELECT *
FROM
(
SELECT NEWID() AS guid, UserID, RoleId, ClubId, 0 AS GroupRole
FROM dbo.Portal_UserRoles
UNION
SELECT NEWID() AS guid, dbo.Portal_UserGroups.UserId,
dbo.Portal_GroupRoles.RoleId, dbo.Portal_UserGroups.ClubId,
dbo.Portal_GroupRoles.GroupId AS GroupRole
FROM dbo.Portal_GroupRoles
INNER JOIN dbo.Portal_UserGroups
ON dbo.Portal_GroupRoles.GroupId = dbo.Portal_UserGroups.GroupId
) AS derivedtbl_1
WHERE (derivedtbl_1.RoleId,derivedtbl_1.ClubId) IN
(
SELECT Portal_GroupRoles.RoleId, Portal_ClubGroups.ClubId
FROM Portal_GroupRoles
INNER JOIN Portal_ClubGroups
ON Portal_GroupRoles.GroupId = Portal_ClubGroups.GroupId
)
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Vous devez séparer en deux clauses
ou vous pourriez refactoriser un peu
La norme, de la façon classique de faire ce que vous chercher est une clause EXISTS:
Méfiez-vous de fractionner les deux colonnes condition en deux paragraphes; il ne vous donne pas la même réponse (en général) que l'application des deux-colonne état dans une clause EXISTS.
Faire une jointure sur la table dérivée au lieu d'utiliser le
in
Le vôtre est utile de syntaxe et est pris en charge dans le standard SQL. Il n'est pas encore mis en œuvre dans SQL Server, mais vous pouvez voter en faveur de son inclusion ici.