我只想在数据库中已存在相同的组时才创建一组用户。
我有一个包含三列的GroupUser表:主键,GroupId和UserId。一组用户被描述为该表中的多行共享相同的GroupId。 给定UserId列表,我想找到匹配的GroupId(如果存在)。
在SQL中最有效的方法是什么?
答案 0 :(得分:0)
有几种方法可以做到这一点。这个答案仅适用于sql server(因为你的标签中没有提到它)
将逗号分隔的userid列表传递给存储过程,并在SP中使用此命令创建动态查询,并使用EXEC
命令执行查询。 This链接将在这方面为您提供指导
在SP中使用表值参数。这仅适用于sql server 2008及更高版本。
以下链接将帮助您入门。
http://www.codeproject.com/Articles/113458/TSQL-Passing-array-list-set-to-stored-procedure-MS
希望这有帮助。
答案 1 :(得分:0)
假设您的UserId列表存储在名为' MyUserIDList'的表中,以下查询将有效地返回包含您的用户列表的GroupId列表。 (SQL Server语法)
Select GroupId
From (
Select GroupId
, count(*) as GroupMemberCount
, Sum(case when MyUserIDList.UserID is null then 0 else 1 End) as GroupMemberCountInMyList
from GroupUser
left outer join MyUserIDList on GroupUser.UserID=MyUserIDList.UserID
group by GroupId
) As MySubQuery
Where GroupMemberCount=GroupMemberCountInMyList