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

时间:2014-04-19 06:29:33

标签: php mysql sql join

我有两张桌子。一个是学生,另一个是结果。现在,在studenttnt表中的学生ID是唯一的,但是一个学生可以在结果表中有多行。

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

我已经应用了内部联接来实现这一点,但我在结果表中为每个条目获取单独的行。如果我应用限制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 个答案:

答案 0 :(得分:2)

  

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

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 :(得分: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 
    join results on results.std_id=students.id 
group by students.id

答案 2 :(得分: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;