四表联合查询后如下,现在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)