使用mysql组成3个表的复杂查询

时间:2016-05-23 16:51:29

标签: mysql sql

我有3张桌子:

  • 学生
  • 实习
  • student_internship


pd.DataFrame

和student_intership是两个表格的“桥梁”。

create table student(student_id varchar(45), student_name varchar(45));
create table internship(internship_id varchar(45), internship_name varchar(45));

所以,这是多种多样的情况。

情况:

我想得到实习的名字和学生人数,但是 如果该实习没有学生,那么应该有以下示例:

student_intership(student_id, internship_id)

我试过的代码:

 intership_name | count(student_id)
--------------------------------
 1. intern1        |  20
 2. intern2        |  3
 3. intern3        |  0

2 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:0)

快速刺伤:

 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