SQL时间表系统
因此,目前我有一个调度系统,它将结果显示在屏幕上,用户可以在屏幕上填充打开的插槽。下面是它当前外观的链接 当我想开始新的一周时,问题就出现了。这个表由63个槽组成。这是我当前使用的当前查询:SQL时间表系统,sql,Sql,因此,目前我有一个调度系统,它将结果显示在屏幕上,用户可以在屏幕上填充打开的插槽。下面是它当前外观的链接 当我想开始新的一周时,问题就出现了。这个表由63个槽组成。这是我当前使用的当前查询: Select volunteer.F_Name , volunteer.L_Name , session.Session_Id , vol_session.Vol_Id , WEEK(vol_session.Date) From vol_sessio
Select volunteer.F_Name
, volunteer.L_Name
, session.Session_Id
, vol_session.Vol_Id
, WEEK(vol_session.Date)
From vol_session
Right Join session
On vol_session.Session_ID = session.Session_Id
Left Join volunteer
On volunteer.Vol_ID = vol_session.Vol_Id
Where WEEK(vol_session.Date) Is Null
Or WEEK(vol_session.Date) = '6'
Order By session.Session_Id;
如果一个志愿者在另一周选择了相同的时段,那么查询不会显示所有63个结果
正如你所看到的,结果18缺失,因为下周有人占用了这个位置。需要做的是,这个丢失的18个插槽应该显示为空,以便我能够允许它被预订 右连接与左连接相结合。。。太令人困惑了。。。(只切换到左联接,因为
主表左联接可选数据
比可选数据右联接主表
更容易理解)您的右联接
被周(vol_session.Date)=“6”
子句的部分否定,强制它成为内部联接
。将WHERE
条件移动到ON
子句。更好的是,不要在同一个查询中混合使用LEFT
和RIGHT
连接。更好的是,根本不要使用右连接
。@Siyual,有一个是NULL或-ed。但是,这仍然是一个很好的建议。@jarlh RIGHT,但是或WEEK(vol_session.Date)='6'
仍然应该过滤记录。@Siyual将查询更改为左连接后,查询只输出3个结果,但我需要全部63个结果才能显示出来