SET @strsql='select R.moduleid,username from Modules R 
         inner join(select moduleid,username=dbo.f_str(moduleid) from ModuleHost group by moduleid)T 
         on R.moduleid=1 and R.moduleid=T.moduleid'我想查询出moduleid=1的记录,有两个表Modules 和Modulehost,username这个字段在ModuleHost。问题是:如果username是空的话,查寻出的结果就是空的,我想得到结果是:
moduleid username
1         null
就是说即使username为空,结果也能查询出来,怎么办呢。-- 1. 创建处理函数
CREATE FUNCTION dbo.f_str(@moduleid int)
RETURNS varchar(100)
AS
BEGIN
    DECLARE @re varchar(100)
    SET @re=''
    SELECT @re=@re+','+username
    FROM ModuleHost
    WHERE moduleid=@moduleid
    RETURN(STUFF(@re,1,1,''))
END
GO

解决方案 »

  1.   

    后来我改了写法,如下SET @strsql='select R.moduleid,username 
        from (select moduleid,username from ModuleHost where moduleid=1这样查询,username为空的话,结果集也为空,如何在usernam=null的时候能查出结果
    moduleid=1
    username=null
      

  2.   

    那该left join咯,inner join不会范围null值的。
      

  3.   

    试一试加or username is null;
    select R.moduleid,username from Modules R 
             inner join(select moduleid,username=dbo.f_str(moduleid) from ModuleHost group by moduleid)T 
             on R.moduleid=1 and (R.moduleid=T.moduleid)or username is null'或者使用右连接也可以实现同样的效果;
      

  4.   


    SET @strsql='select R.moduleid,M.username 
        from Modules R left join ModuleHost M on R.moduleid = M.moduleid
        where moduleid=1