【问题标题】:Procedure with 2 results in same output具有 2 个结果的过程产生相同的输出
【发布时间】:2016-07-19 07:03:22
【问题描述】:

有没有办法返回这样的输出?

我的程序是空的,但是是这样的:

ALTER PROCEDURE TEST
    @in_USERID

AS
BEGIN

        SELECT FROM UsersGroups ug, Accounts ac, GroupsRooms gr, Posts po WHERE
        ug.USER_ID  =   @in_USERID 
        OR -- and my question is here. How can I read the other users that are in the same group only knowing the id of 1 user.

END

这是我的结构:

【问题讨论】:

    标签: sql-server database stored-procedures


    【解决方案1】:

    根据您的预期结果,我编写以下查询:

    这将导致 SELECT ALL USERS who are in the same group of USERID ENTERED + ALL GROUPS

    ALTER PROCEDURE TEST
        @in_USERID INT
    AS
    BEGIN
    
        SELECT UG.GR_ID, GR.POST_ID, PO.POST_NAME, UG.[USER_ID], AC.[NAME]
        FROM UsersGroups UG
        JOIN Accounts AC ON AC.[USER_ID] = UG.[USER_ID]
        JOIN GroupsRooms GR ON GR.GR_ID = UG.GR_ID
        JOIN Posts PO ON PO.POST_ID = GR.POST_ID
        WHERE UG.[USER_ID] = @in_USERID
    
        UNION
    
        SELECT UG.GR_ID, GR.POST_ID, PO.POST_NAME, UG.[USER_ID], AC.[NAME]
        FROM UsersGroups UG
        JOIN Accounts AC ON AC.[USER_ID] = UG.[USER_ID]
        JOIN GroupsRooms GR ON GR.GR_ID = UG.GR_ID
        JOIN Posts PO ON PO.POST_ID = GR.POST_ID
        JOIN UsersGroups SUG ON SUG.GR_ID = UG.GR_ID
        WHERE UG.[USER_ID] != @in_USERID AND SUG.[USER_ID] = @in_USERID;
    
    END
    

    请查找Working DEMO

    【讨论】:

    • 我在使用您的过程时遇到错误 [Err] 42000 - [SQL Server]在“WHERE”附近的预期条件的上下文中指定的非布尔类型表达式。
    • 您好,谢谢您的回答。但是为什么有 2 个相同的 "SELECT" ?它可以工作,但只返回 1 个值(输入的用户 ID 的值)。这也应该返回其他用户。可能是因为@in_USERID 相同?
    • 如果我没有错!= 即使用户不在组中,查询也会选择所有值。我的意思是如果我的@in_USERID = 5 .. 应该只返回 GR_Id = 100 中的用户
    • 是的,检查这个预期的结果。在这张图片中你可以更好地理解:i.imgur.com/Y8aL1Qv.png(我使用 3 作为@in_USERID)
    • 也许你误会了。我要求输出 in_USERID 同一组中的所有用户(包括 in_USERID)+ in_USERID 的所有组
    【解决方案2】:

    这样的事情应该可以解决问题:

    ALTER PROCEDURE TEST @in_USERID
    AS
    BEGIN
    
        SELECT *
        FROM UsersGroups
        WHERE UsersGroups.Id IN (SELECT UsersGroups.ID FROM UsersGroups ug WHERE ug.USER_ID  =   @in_USERID )
    END
    

    【讨论】:

    • 您好,我测试过,但返回表 UsersGroups 中的所有值
    猜你喜欢
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多