【问题标题】:Data manipulation with two tables使用两个表进行数据操作
【发布时间】:2019-02-21 13:42:18
【问题描述】:

对不起,这个非常模糊的标题,老实说,我不知道如何准确地提出我的问题。我需要一些帮助来编写两个表的查询。

这些表被命名为 subjectassignment,它们看起来像这样:

主题

subjectcode | subjectname         | classcode
---------------------------------------------
BAC3000     | Bachelorassignment  | IS3
DAT1000     | Databasetechonlogy  | IS1
INF1000     | Informationsystems  | IS1
LED2000     | IT-leadership       | IS2
OBJ2000     | OOP                 | IS2
PRG3000     | Applied programming | IS3

作业

subjectcode | number | deadline
-------------------------------------
DAT1000     | 1      | 2020-10-20
DAT1000     | 2      |
INF1000     | 1      | 2020-10-30
INF1000     | 2      | 

我需要编写一个查询,输出所有主题代码和主题拥有的分配数量。输出应该是这样的:

subjectcode | numberofassignment
--------------------------------
BAC3000     | 0  
DAT1000     | 2  
INF1000     | 2  
LED2000     | 0       
OBJ2000     | 0               
PRG3000     | 0 

我尝试过以不同的方式创建视图、加入表格和使用计数,但没有成功。任何帮助表示赞赏。

【问题讨论】:

  • BAC3000 在分配表中不存在??
  • DAT1000 确实存在,两次,但您的示例阅读为0 ??
  • 示例是个好主意,可以使问题更加清晰,但它们确实应该有意义,否则只会增加混乱
  • 抱歉,我搞砸了 BAC3000 作业。现在应该修好了。

标签: mysql sql count jointable


【解决方案1】:

只需使用count() 并离开加入

   select s.subjectcode ,count(number) as numberofassignment from
   Subject s left join Assignment a 
   on s.subjectcode=a.subjectcode 
   group by s.subjectcode 

【讨论】:

  • 我收到此错误:#1052 - 字段列表中的“主题代码”列不明确。但是通过添加“a.subjectcode”来修复它。
  • 我的第一条评论是错误的,但你说对了。意思是“s.subjectcode”。
【解决方案2】:

根据您提供的数据,结果不可能完全一样。但根据您的要求,这样的事情可以完成:

SELECT s.subjectcode, count(1) as numberofassignment FROM subject s
LEFT JOIN assignment a
    ON s.subectcode = a.subjectcode
GROUP BY s.subjectcode

【讨论】:

    【解决方案3】:

    我不确定我是否正确,但是当您想计算分配给主题代码的数量时,您可以使用此语句。你不需要join,你可以使用子查询来代替。

    select 
     subjectcode,
     (select count(*) from Assignment where subjectcode = s.subjectcode) as numberofassignment
    from 
     Subject s
    

    【讨论】:

      【解决方案4】:

      这将在 MySQL 中工作:

      select subjectcode, (select count(*) from Assignment where subjectcode=s.subjectcode)  
      from Subject s
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-20
        • 2020-08-20
        • 2014-07-20
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 2022-07-02
        • 2018-11-17
        相关资源
        最近更新 更多