首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于inner join的sql查询语句,怎么将不符合的记录也查出来

2012-11-20 
关于inner join的sql查询语句,如何将不符合的记录也查出来?SQL codeSET @strsqlselect R.moduleid,usern

关于inner join的sql查询语句,如何将不符合的记录也查出来?

SQL code
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为空,结果也能查询出来,怎么办呢。
SQL code
-- 1. 创建处理函数CREATE FUNCTION dbo.f_str(@moduleid int)RETURNS varchar(100)ASBEGIN    DECLARE @re varchar(100)    SET @re=''    SELECT @re=@re+','+username    FROM ModuleHost    WHERE moduleid=@moduleid    RETURN(STUFF(@re,1,1,''))ENDGO


[解决办法]
那该left join咯,inner join不会范围null值的。
[解决办法]
试一试加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'

或者使用右连接也可以实现同样的效果;
[解决办法]
SQL code
SET @strsql='select R.moduleid,M.username     from Modules R left join ModuleHost M on R.moduleid = M.moduleid    where moduleid=1
[解决办法]
用左连接left join试试

热点排行