我有两个表,tblEntities和tblScheduling.
tblEntities:
EntityID ShortName Active 1 Dirtville 1 2 Goldtown 1 3 Blackston 0 4 Cornfelt 1 5 Vick 1
tblScheduling:
ScheduleID EntityID SchedulingYearID 1 1 20 2 1 21 3 2 20 4 3 19 5 5 20
我需要一个查询,它将显示特定ScheduleYearID的所有活动实体及其日程安排信息.
输出应该看起来像(在这种情况下所需的SchedulingYearID是20):
EntityID ScheduleID 1 1 2 3 4 NULL 5 5
我到目前为止写的查询是:
SELECT tblEntities.EntityID, tblEntities.ShortName, tblScheduling.ScheduleID FROM tblScheduling RIGHT OUTER JOIN tblEntities ON tblScheduling.EntityID = tblEntities.EntityID WHERE (tblScheduling.SchedulingYearID = @SchedulingYearID) AND (tblEntities.Active = 1) ORDER BY tblEntities.EntityID
我的问题是使用此查询它将不包括没有调度信息的活动实体(例如上面示例中的EntityID 4).我可以编写查询以显示所有活动实体及其计划状态,但是一旦我开始通过SchedulingYearID限制它,我将丢失这些特定实体.
是否有任何解决方案,我显然缺少,而不必诉诸子查询,游标等?如果不是,这不是什么大问题,我只是觉得我在这里错过了一些简单的东西.
试试这个...连接条件被评估以产生中间连接结果集,然后,(对于外部连接),在"继续"之前,所有来自"外部"的行都被添加回去...在评估条件的情况下完成所有连接后......
SELECT E.EntityID, E.ShortName, S.ScheduleID FROM tblEntities E Left Join tblScheduling S ON S.EntityID = E.EntityID And S.SchedulingYearID = @SchedulingYearID WHERE E.Active = 1 ORDER BY E.EntityID
我改变了你的连接顺序,因为我更喜欢左连接......但这没关系