我有两张桌子。一个是学生,另一个是结果。现在,在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
以下是我得到的结果:
答案 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;