SQL Query查找缺少的条目

时间:2015-12-04 22:04:12

标签: mysql

我有3张桌子:

应用

  • ID
  • reviewer1_id
  • reviewer2_id

审阅

  • ID

评论

  • ID
  • APPLICATION_ID
  • reviewer_id

(*请注意,我删除了不相关的表列,例如名称,标题等)。

为评审员分配多个应用程序,并为每个应用程序提交1个评论。因此,应用程序应该有2个与之相关的评论,均来自不同的评论者。

我需要编写一个MySQL查询来选择尚未完成对他们所分配的每个应用程序的评论的所有评论者。

我已经在这个问题上工作了很长一段时间,但解决方案却让我望而却步。我可以找到所有与尚未收到任何评论的应用程序相关的评论者,但如果一个应用程序只有1篇评论但没有完成其他评论,那我就是亏本。

2 个答案:

答案 0 :(得分:2)

如果我理解正确的话。您首先在Reviewer上分配Application。当Reviewer完成后,审核会显示在Reviews

因此,您需要使用LEFT JOIN来查找哪些评论不完整。

SELECT A.id, reviewer1_id
FROM Applications A
LEFT JOIN Reviews R
       ON A.reviewer1_id = R.reviewer_id
      AND A.id = R.application_id
WHERE R.id IS NULL

UNION ALL

SELECT A.id, reviewer2_id
FROM Applications A
LEFT JOIN Reviews R
       ON A.reviewer2_id = R.reviewer_id
      AND A.id = R.application_id
WHERE R.id IS NULL

如果您还需要Reviewer名称,则需要一个JOIN

SELECT A.id, A.reviewer1_id, RV.name
FROM Applications A
LEFT JOIN Reviews R
       ON A.reviewer1_id = R.reviewer_id
      AND A.id = R.application_id
     JOIN Reviewers RV
       ON A.reviewer1_id = RV.id
WHERE R.id IS NULL

答案 1 :(得分:0)

SELECT * FROM Applications a 
JOIN Reviewers r1 ON a.reviewer1_id = r1.id
JOIN Reviewers r2 ON a.reviewer2_id = r2.id
LEFT JOIN Reviews rv1 ON r1.id = rv1.reviewer_id
LEFT JOIN Reviews rv2 ON r2.id = rv2.reviewer_id
WHERE rv1.id IS NULL OR rv2.id IS NULL