用于外键外部联接的SQL逻辑帮助

用于外键外部联接的SQL逻辑帮助,sql,sql-server,Sql,Sql Server,我遇到的情况是,表“MEMBERS”中有成员数据。然后,对于分配给成员的每种类型的任务,它们存储在4个单独的表中:PRSP_任务、PRSP_呼叫、PRSP_游览和PRSP_电子邮件。这四个表通过外键memid=prospectid链接回members表 我试图做的是,对于members表中在两个日期之间输入的每个条目,返回四个表中每个表的所有行。如果没有任何行,那么我仍然需要一行来表示这一点 我似乎没有得到MEMBERS表中的记录,但在其他四个表中没有行 SELECT MEMBERS.memid

我遇到的情况是,表“MEMBERS”中有成员数据。然后,对于分配给成员的每种类型的任务,它们存储在4个单独的表中:PRSP_任务、PRSP_呼叫、PRSP_游览和PRSP_电子邮件。这四个表通过外键memid=prospectid链接回members表

我试图做的是,对于members表中在两个日期之间输入的每个条目,返回四个表中每个表的所有行。如果没有任何行,那么我仍然需要一行来表示这一点

我似乎没有得到MEMBERS表中的记录,但在其他四个表中没有行

SELECT MEMBERS.memid,
       MEMBERS.fname,
       MEMBERS.lname,
       MEMBERS.relationship,
       MEMBERS.employeeid,
       MEMBERS.entrydate,
       PRSP_TOURS.tourdate,
       PRSP_TOURS.tournote,
       PRSP_CALLS.calldate,
       PRSP_CALLS.callnote,
       PRSP_EMAILS.emaildate,
       PRSP_EMAILS.emailsubject,
       PRSP_TASKS.taskdate,
       PRSP_TASKS.tasknote
FROM   MEMBERS
       LEFT OUTER JOIN PRSP_TASKS
                    ON MEMBERS.memid = PRSP_TASKS.memid
       LEFT OUTER JOIN PRSP_TOURS
                    ON MEMBERS.memid = PRSP_TOURS.prospectid
       LEFT OUTER JOIN PRSP_CALLS
                    ON MEMBERS.memid = PRSP_CALLS.prospectid
       LEFT OUTER JOIN PRSP_EMAILS
                    ON MEMBERS.memid = PRSP_EMAILS.prospectid
WHERE  ( MEMBERS.siteid = @rvSite )
       AND ( MEMBERS.relationship = 'P' )
       AND ( MEMBERS.entrydate BETWEEN @rvEntryDateStart AND @rvEntryDateEnd ) 

查询应返回与where条件匹配的所有成员。您确定丢失的记录与您的条件不匹配吗?显示一些您希望看到但不匹配的数据。确保包括sideID、relationship和entry date以及传递到变量中的值。如果您注释掉select和left联接中的所有PRSP_uuu值,您仍然无法正确获取这些记录?更新:好的,您是正确的。我遗漏了重要的细节。上面的查询完成了它应该做的一切。但是,如果我添加了一个额外的级别,并且在某个日期之后只要求这4个表中的条目,那么我不会收到这些表中成员条目的null。很抱歉给你带来了困惑。我的要求与我处理此问题时不同。@Merlin-不要将该标准放在where子句中,而是放在on子句中。如果你把它放在where子句中,你会发现否定外部连接。