求救

sun1943shinee 2014-07-21 01:49:07
我现在在写一个缺勤的SQL,两个表,userinfo表checkinout表
我现在写到

select b.checkTime,a.userId,a.checkDate from (
select distinct userId,format(checktime,'yyyy-mm-dd') as checkDate from CHECKINOUT
where format(checktime,'yyyy-mm-dd') in
(
select format(checktime,'yyyy-mm-dd')as checktime
from CHECKINOUT
where checktime<CDate('2014/7/1') and checktime>=CDate('2014/6/1')
group by format(checktime,'yyyy-mm-dd')
having count(1)>20
)
) as a right join (
select format(checktime,'yyyy-mm-dd')as checktime
from CHECKINOUT
where checktime<CDate('2014/7/1') and checktime>=CDate('2014/6/1')
group by format(checktime,'yyyy-mm-dd')
having count(1)>20
) as b on b.checkTime=a.checkDate order by a.Userid
就是用left join做连接,连接前的是工作日期和***如下图


关键是如何显示这两个left join后没有的:比如:2014.6.5 3 2014.6.5


left join 后的效果:

本来应该有 2014.6.5 NULL NULL 但是没有,经过考虑觉得是其他记录连接干扰了




大神大神在哪里啊
...全文
83 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2014-07-21
  • 打赏
  • 举报
回复
看起来不像是MSSQL的语法?这个是ORACLE语法还是什么语法?
飃颻 2014-07-21
  • 打赏
  • 举报
回复
內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。内部连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来。 左连接和右连接都是外部连接,也就是区别于内部连接,它对不满足连接条件的行并不是象内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少。 左连接是只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来 右连接是只要右边表中有记录,数据就能检索出来 ; 全连接则会回返回两个表中的所有记录。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧