首页 文章

内部联接限制左表结果限制为1

提问于
浏览
1

我有两张 table . 一个是学生,另一个是结果 . 现在,studenttnt表中的student id是唯一的,但是一个学生可以在结果表中有多行 .

我想加入两个表,并为每个学生生成一个结果行 . 此行将包含学生的信息(姓名,图像等)和大多数 recent 学生成绩 .

我已经应用了内部联接来实现这一点,但我在结果表中为每个条目获取单独的行 . 如果我申请限制1,它只给我一个学生的数据,而不是每个学生的数据 .

这是查询:

SELECT students.id,
       students.roll_num,
       students.first_name,
       students.middle_name,
       students.last_name,
       students.course,
       students.photo_url,
       results.parano,
       results.grade
FROM students
RIGHT JOIN results ON results.std_id=students.id

以下是我得到的结果:

enter image description here

3 回答

  • 2
    select
        students.id,
        students.roll_num,
        students.first_name,
        students.middle_name,
        students.last_name,
        students.course,
        students.photo_url,
        results.parano,
        results.grade 
    from students 
        join results on results.std_id=students.id 
    group by students.id
    
  • 1

    最近的学生成绩是关键 . 这会使查询复杂化......

    SELECT
        st.id,
        st.roll_num,
        st.first_name,
        st.middle_name,
        st.last_name,
        st.course,
        st.photo_url,
        rs1.parano,
        rs2.grade 
    FROM students st, results rs1, results rs2 
    WHERE rs1.std_id=st.id AND rs2.std_id=st.id 
    GROUP BY st.id
    HAVING 
            count(rs1.parano) = 
            (SELECT count(rs.parano) 
            FROM results rs 
            WHERE rs.std_id=st.id 
            ORDER BY count(rs.parano) 
            LIMIT 1)
    AND     count(rs2.grade) = (
            SELECT count(rs.grade) 
            FROM results rs 
            WHERE rs.std_id=st.id 
            ORDER BY count(rs.grade) 
            LIMIT 1)
    
  • 1

    假设结果表中有一个日期字段 . 最好的方法是先过滤结果,然后再执行连接 .

    select
        students.id,
        students.roll_num,
        students.first_name,
        students.middle_name,
        students.last_name,
        students.course,
        students.photo_url,
        new_results.parano,
        new_results.grade 
    from students inner join 
        (select std_id, parano, grade, max(result_date) 
             from results group by std_id ) 
         as new_results
    on students.id = new_results.id;
    

相关问题