sql如下:
select distinct AA.NodeID, AA.NodeCode,AA.NodeName,AA.nodetype,AA.ModuleID,BB.LinkUrl from K_SysModuleNode AA LEFT JOIN
(select distinct M.ModuleID,M.LinkUrl,P.NodeID from K_SysModuleNode N, K_SysModule M,K_SysActionPermit A,K_SysUserGroupPermit P
WHERE M.ModuleID=A.ModuleID AND P.PermitCode=A.ID AND P.UserGroupCode IN
(SELECT K_SysUserRole.UserGroupCode FROM K_SysUserRole WHERE K_SysUserRole.UserID='5')
) BB
ON AA.NodeID=BB.NodeID WHERE AA.ModuleID=BB.ModuleID and AA.NodeCode LIKE '100%' and AA.IsValid=1 and AA.IsLeftDisplay=1 order by NodeCode现在想要的是,如果BB没有记录则返回空,不知道该怎么做

解决方案 »

  1.   

    right join 
    看看
      

  2.   

    ISNULL(BB.LinkUrl,'')
    就是这个
      

  3.   

    select distinct AA.NodeID, AA.NodeCode,AA.NodeName,AA.nodetype,AA.ModuleID,BB.LinkUrl from K_SysModuleNode AA INNER JOIN--可能是这个意思吧
    (select distinct M.ModuleID,M.LinkUrl,P.NodeID from K_SysModuleNode N, K_SysModule M,K_SysActionPermit A,K_SysUserGroupPermit P
    WHERE M.ModuleID=A.ModuleID AND P.PermitCode=A.ID AND P.UserGroupCode IN
    (SELECT K_SysUserRole.UserGroupCode FROM K_SysUserRole WHERE K_SysUserRole.UserID='5')
    ) BB
    ON AA.NodeID=BB.NodeID WHERE AA.ModuleID=BB.ModuleID and AA.NodeCode LIKE '100%' and AA.IsValid=1 and AA.IsLeftDisplay=1 order by NodeCode
      

  4.   

    啥意思,你这样BB的LinkUrl没有不就是NULL吗
      

  5.   

    现在子查询BB不管有没有记录,都返回AA里的记录,因为是LEFT JOIN 这在BB有记录的时候是对的,但在BB没记录的时候(就是没有权限的时候)就不对了想要的:BB有记录的时候   返回AA和BB的合集,按AA.NodeID=BB.NodeID(正常)
    如果BB没有记录的时候 返回空(不正常,返回AA的集合)
      

  6.   

    是四楼那样吗,如果不是,再把下面一句话说清楚些:如果BB没有记录的时候 返回空(不正常,返回AA的集合)
      

  7.   

    BB子查询的作用是根据用户ID返回所有操作的,就是查找当前用户的权限,结果如下ModuleID LinkUrl NodeID
    D0F465C2-9A5C-4321-9D92-FE8EDEC37132 ../SysManage/ModelNodeList.aspx E737FE9D-857A-497C-A29C-2456314D1C65
    946E2EC9-04DA-41EB-A3A1-3E5B02E7C2A0 ../SysManage/UserGropManage.aspx 01647CE0-5B30-4795-AD8D-2B69AECAEE8B
    169ABDF6-75AF-43D3-B5D1-451ED79724BD ../SysManage/ModelList.aspx 1B86B4DB-36D6-41C1-A321-53E667F38DDA
    252856E7-E193-4DC5-AE85-DB5D64EF29F2 ../SysManage/ActionList.aspx 78BE1D75-7F48-4ECD-9E46-BAA8A3E0EF5D
    C5AA7419-C9CF-445F-A87C-BB3793C2E6ED ../SysManage/SysUserList.aspx BDE30D8C-823E-4238-A075-DA0664F43FBC
    AA查询的作用是查找目录节点, 想要按权限生成目录
      

  8.   

    “如果BB没有记录的时候 返回空(不正常,返回AA的集合)”
    BB没记录表示当前用户没有权限!但是返回了aa的记录,所以错误
      

  9.   

    用LEFT JOIN 而不用 =的目的是AA中的数据(菜单节点)不全在BB(操作)中,BB中只有AA的一部分(可以定义操作的菜单)
      

  10.   

    select distinct AA.NodeID, AA.NodeCode,AA.NodeName,AA.nodetype,AA.ModuleID,BB.LinkUrl 
    from 
    (
    select distinct M.ModuleID,M.LinkUrl,P.NodeID 
    from K_SysModuleNode N, K_SysModule M,K_SysActionPermit A,K_SysUserGroupPermit P
    WHERE M.ModuleID=A.ModuleID AND P.PermitCode=A.ID AND P.UserGroupCode IN
    (
    SELECT K_SysUserRole.UserGroupCode FROM K_SysUserRole WHERE K_SysUserRole.UserID='5'
    )
    ) BB LEFT JOIN
    ON AA.NodeID=BB.NodeID WHERE AA.ModuleID=BB.ModuleID and AA.NodeCode LIKE '100%' and AA.IsValid=1 and AA.IsLeftDisplay=1 order by NodeCode
      

  11.   


    select distinct AA.NodeID, AA.NodeCode,AA.NodeName,AA.nodetype,AA.ModuleID,BB.LinkUrl from K_SysModuleNode AA LEFT JOIN
    (select distinct M.ModuleID,M.LinkUrl,P.NodeID from K_SysModuleNode N, K_SysModule M,K_SysActionPermit A,K_SysUserGroupPermit P
    WHERE M.ModuleID=A.ModuleID AND P.PermitCode=A.ID AND P.UserGroupCode IN
    (SELECT K_SysUserRole.UserGroupCode FROM K_SysUserRole WHERE K_SysUserRole.UserID='5')
    ) BB
    ON AA.NodeID=BB.NodeID 
    and AA.ModuleID=BB.ModuleID 
    where AA.NodeCode LIKE '100%' and AA.IsValid=1 and AA.IsLeftDisplay=1 order by NodeCode
      

  12.   

    最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281