【问题标题】:Select from one table what doesn't exist three times in other table从一个表中选择另一个表中不存在的三遍
【发布时间】:2013-03-22 22:26:38
【问题描述】:

我有一张桌子,里面有学生提交的不同项目。每个项目应由三位不同的评委评判。所以还有另一个分数表,其中包括 projectid 和 Judgeid。我正在尝试编写一个查询,可以选择任何尚未判断三遍的项目。

这里有一些示例表...

项目

projectid | projectname
-----------------------
9         | Kintetics
11        | Volcano
15        | Robots
22        | Oceanlife

分数

scoreid (AI) | projectid | judgeid | score
------------------------------------------
1            | 9         | 15      | 5
2            | 11        | 15      | 18
3            | 9         | 23      | 12
4            | 11        | 23      | 11
5            | 9         | 45      | 19
6            | 22        | 15      | 3

我希望此查询返回项目 11、15 和 22,因为这三个项目还没有分配给他们的三名评委。

【问题讨论】:

  • 你能改写你的问题吗

标签: mysql sql join


【解决方案1】:
SELECT  a.ProjectID, a.ProjectName
FROM    Projects a
        LEFT JOIN Scores b
            ON a.ProjectID = b.ProjectID
GROUP   BY a.ProjectID, a.ProjectName
HAVING  COUNT(a.ProjectID) < 3

如需进一步了解联接,请访问以下链接:

输出

╔═══════════╦═════════════╗
║ PROJECTID ║ PROJECTNAME ║
╠═══════════╬═════════════╣
║        11 ║ Volcano     ║
║        15 ║ Robots      ║
║        22 ║ Oceanlife   ║
╚═══════════╩═════════════╝

【讨论】:

  • 非常感谢 JW!这是我似乎无法掌握的该死的 HAVING 子句。
【解决方案2】:

另一种选择:

SELECT  a.ProjectID, a.ProjectName
FROM    Projects a
LEFT JOIN (select ProjectID, count(*) counted from Scores) b
       ON a.ProjectID = b.ProjectID
WHERE COALESCE(b.counted,0) < 3

【讨论】:

    【解决方案3】:
    SELECT COUNT(scores.id) AS score_count, projects.* 
    FROM scores, projects
    WHERE scores.projectid = projects.id
    GROUP BY projects.id
    HAVING score_count > 2
    

    【讨论】:

      【解决方案4】:

      试试这个

      select * from scores where id not in (select id from scores where project id in (select projectid from scores group by projectid having count(prjectid)=3))
      

      【讨论】:

        【解决方案5】:

        试试这个:

        SELECT * FROM Projects p WHERE (SELECT COUNT(*) FROM Scores s WHERE s.projectid = p.projectid) < 3
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-05
          • 2018-01-23
          • 2011-11-27
          相关资源
          最近更新 更多