试图找到尚未提交某个报告的Mentor / mentee对

时间:2018-06-18 20:19:14

标签: sql inner-join outer-join

尝试找到未提交特定报告的指导者 - 受指导者组(报告= 147)。所有对都提交了报告,但我还需要那些尚未提交报告的人。

由于

SELECT DISTINCT
     e2.Firstname Mentor_FN
    ,e2.lastname Mentor_LN
    ,e1.Firstname Mentee_FN
    ,e1.lastname Mentee_LN
    ,r.ReportID
FROM
MentorRelationshipStaging m
INNER JOIN Employee e1
    ON e1.EmployeeCode = m.MenteeCode
INNER JOIN Employee e2
    ON e2.EmployeeCode = m.MentorCode
INNER JOIN UserReport ur1 
    ON ur1.EmployeeID = e2.EmployeeID
INNER JOIN Report r 
    ON r.reportID = ur1.ReportID

DATABASE:https://imgur.com/a/9JMRpFw

3 个答案:

答案 0 :(得分:0)

SELECT DISTINCT
     e2.Firstname Mentor_FN
    ,e2.lastname Mentor_LN
    ,e1.Firstname Mentee_FN
    ,e1.lastname Mentee_LN
    ,r.ReportID
FROM
MentorRelationshipStaging m
INNER JOIN Employee e1
    ON e1.EmployeeCode = m.MenteeCode
INNER JOIN Employee e2
    ON e2.EmployeeCode = m.MentorCode
INNER JOIN UserReport ur1 
    ON ur1.EmployeeID = e2.EmployeeID
INNER JOIN Report r 
    ON r.reportID = ur1.ReportID and ur1.ReportID=147

答案 1 :(得分:0)

我不能更具体,因为我们不了解您的架构。但通常使用条件GROUP BY

解决HAVINGCOUNT问题
 GROUP BY e2.Firstname
         ,e2.lastname
         ,e1.Firstname
         ,e1.lastname
 HAVING COUNT(CASE WHEN reported = 147 THEN 1 END) = 0

答案 2 :(得分:0)

我建议:

SELECT e2.Firstname Mentor_FN, e2.lastname Mentor_LN, e1.Firstname Mentee_FN, e1.lastname Mentee_LN
FROM MentorRelationshipStaging m INNER JOIN
     Employee e1
     ON e1.EmployeeCode = m.MenteeCode INNER JOIN
     Employee e2
     ON e2.EmployeeCode = m.MentorCode LEFT JOIN
     UserReport ur1
     ON ur.EmployeeID = e2.EmployeeID
GROUP BY e2.Firstname Mentor_FN, e2.lastname Mentor_LN, e1.Firstname Mentee_FN, e1.lastname Mentee_LN
HAVING SUM(CASE WHEN ur.ReportId = 147 THEN 1 ELSE 0 END) = 0 ;

或者,如果您不想使用GROUP BY

SELECT e2.Firstname Mentor_FN, e2.lastname Mentor_LN, e1.Firstname Mentee_FN, e1.lastname Mentee_LN
FROM MentorRelationshipStaging m INNER JOIN
     Employee e1
     ON e1.EmployeeCode = m.MenteeCode INNER JOIN
     Employee e2
     ON e2.EmployeeCode = m.MentorCode LEFT JOIN
     UserReport ur1
     ON ur.EmployeeID = e2.EmployeeID AND ur.ReportId = 147
WHERE ur.EmployeeId IS NULL;

注意:

  • 关键是LEFT JOIN,以确保您获得未提交报告的人。
  • 不需要Reports表格,因为ReportId位于UserReport
  • 我对JOINUserReport有点怀疑。您建议“导师”始终提交报告。