首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mysql包含3个表的复杂查询

使用mysql包含3个表的复杂查询
EN

Stack Overflow用户
提问于 2016-05-23 16:51:29
回答 2查看 40关注 0票数 0

我有三张桌子:

  • 学生
  • 实习
  • student_internship
代码语言:javascript
复制
create table student(student_id varchar(45), student_name varchar(45));
create table internship(internship_id varchar(45), internship_name varchar(45));

student_intership是这两张表的“桥梁”。

代码语言:javascript
复制
student_intership(student_id, internship_id)

所以,这是一个多到多的情况。

情况:

我想知道实习的名字和学生的人数,但是如果没有那个实习的学生,那么应该有下面的例子:

代码语言:javascript
复制
 intership_name | count(student_id)
--------------------------------
 1. intern1        |  20
 2. intern2        |  3
 3. intern3        |  0

我试过的密码是:

代码语言:javascript
复制
select internship.internship_id, count(student.student_id)
from student_internship, internship, student
where student_internship.student_id = student.student_id
and student_internship.internship_id = internship.internship_id
group by student_internship.internship_id;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-23 16:55:20

试试这个:

代码语言:javascript
复制
SELECT i.internship_name, COALESCE(COUNT(si.student_id), 0) AS cnt
FROM internship i
LEFT JOIN student_intership si ON i.internship_id = si.internship_id
GROUP BY si.internship_id, i.internship_name

上面的查询将返回表internship的所有记录。它将返回与0记录无关的internship记录的student

票数 2
EN

Stack Overflow用户

发布于 2016-05-23 16:56:29

快速刺伤:

代码语言:javascript
复制
 SELECT st.student_id
    ,st.student_name
    ,si.InternshipCount
FROM student st
LEFT JOIN (
    SELECT count(*) AS InternshipCount
        ,student_id
    FROM student_internship s
    INNER JOIN internship i
        ON s.student_id = i.student_id
        group by student_id
    ) AS si
    ON st.student_id = si.student_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37396476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档