簡體   English   中英

內部聯接限制左表結果限制為1

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM