[英]Inner Join limit left table results limit to 1
我有兩張桌子。 一個是學生,另一個是結果。 現在,學生的表中的學生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
這是我得到的結果:
最近的學生成績是關鍵。 這會使查詢復雜化...
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)
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
假設結果表中有一個日期字段。 最好的方法是先過濾結果,然后再執行聯接。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.