0

我要执行的查询是

With getusers As
    (Select userID from userprofspecinst_v where institutionID IN
    (select institutionID, professionID from userprofspecinst_v where userID=@UserID) 
    and professionID IN 
    (select institutionID, professionID from userprofspecinst_v where userID=@UserID))

    select username from user where userID IN (select userID from getusers)

这就是我想要做的。给定一个用户 ID 和一个包含用户 ID 以及他们的机构和专业 ID 的视图,我想获取也具有相同机构 ID 和专业 ID 的其他用户 ID 的列表。然后使用该用户 ID 列表,我想从另一个表(用户)获取与每个用户 ID 对应的用户名。我在尝试创建过程时遇到的错误是,“当 EXISTS 未引入子查询时,选择列表中只能指定一个表达式。”。我是否采取了正确的方法来构建此查询?

4

1 回答 1

0

以下查询应该执行您想要执行的操作:

SELECT      u.username

FROM        user AS u
INNER JOIN  userprofspecinst_v AS up ON u.userID = up.userID
INNER JOIN  (SELECT institutionID, professionID FROM userprofspecinst_v 
                 WHERE userID = @userID) AS ProInsts
                     ON (up.institutionID = ProInsts.institutionID 
                                 AND up.professionID = ProInsts.professionID)

实际上,关键部分是最后一个 INNER JOIN 语句 - 这将创建一个表,其中包含用户 ID 所属的 insitutionsids 和 professsionids。然后,我们在视图中获取具有相同机构 ID 和职业 ID(ON 条件)的所有匹配项,然后将它们链接回相应用户 ID 上的用户表(第一个 JOIN)。

您可以为您感兴趣的每个用户 id 运行此命令,也可以加入查询结果(您的getusers)(这取决于您正在运行的数据库引擎)。

如果您不熟悉 JOIN,Jeff Atwood 的介绍性帖子是一个很好的起点。

The JOIN statement effectively allows you to explot the logical links between your tables - the userId, institutionID and professionID are all examples of candidates for foreign keys - so, rather than having to constantly subquery each table and piece the results together, you can link all the tables together and filter down to the rows you want. It's usually a cleaner, more maintainable approach (although that is opinion).

于 2012-08-12T20:17:53.997 回答