当前位置: 代码迷 >> Sql Server >> 有没有可能使while后面的条件只作用以非空的数据
  详细解决方案

有没有可能使while后面的条件只作用以非空的数据

热度:73   发布时间:2016-04-24 10:16:38.0
有没有可能使while后面的条件只作用于非空的数据
四表联合查询后如下,现在while 后没加条件,我的想法是while后加了checksnid =1后 checksnid 为空的仍被查询到,不为空的则符合checksnid =1才被查询出来。checksnid 其实是一个表的ID


具体表述如下
我有四表
表一放了,学校名 和ID
表二放了学生表信息,如姓名 学号等有列ID 等,还有和表一关联的schoolID
表三为测试名表,有列 测试名,ID
表四为测试结果表,有ID,结果等,还有与表三关联的checksnid 与表二关联的userID
现在想得到以表二为基准的,带有其他相关三表的信息的全部结果
比如 表二有8位学生,那结果就是8条,经过尝试,用left join查询结果如下,似乎可行了。
问题是:现在while 后没加条件,查到了所有信息

select u.id userid,c.id checkid, c.checksnid,c.checkresult,
 c.checktime, c.addtime,u.schoolid,u.schoolyear,u.schoolclass,
 u.realname,u.usersex,u.studentid,cs.snname,s.schoolname from 
 user_info u 
 inner join school_info s on s.id=u.schoolid 
 left join check_info c on c.userid=u.id 
 left join checksn cs on c.checksnid=cs.id where u.id>0 
--加了这个条件就什么也查不出来 and (c.checksnid=1 or c.checksnid =null) 

------解决方案--------------------
用子查询啊
...
left join (SELECT * FROM checksn WHERE checksnid=1) cs on c.checksnid=cs.id
 where u.id>0

------解决方案--------------------

select u.id userid,c.id checkid, c.checksnid,c.checkresult,
 c.checktime, c.addtime,u.schoolid,u.schoolyear,u.schoolclass,
 u.realname,u.usersex,u.studentid,cs.snname,s.schoolname from 
 user_info u 
 inner join school_info s on s.id=u.schoolid 
 left join check_info c on c.userid=u.id 
 left join checksn cs on c.checksnid=cs.id where u.id>0 
and   (c.checksnid=1 or c.checksnid is null)
  相关解决方案