【问题标题】:Inner Join limit left table results limit to 1Inner Join 限制左表结果限制为 1
【发布时间】:2014-06-03 17:00:53
【问题描述】:

我有两张桌子。一个是学生,另一个是结果。现在学生表中的学生 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

这是我得到的结果:

【问题讨论】:

    标签: php mysql sql join


    【解决方案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)
    

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

        假设您在结果表中有一个日期字段。最好的办法是先过滤结果,然后再进行join。

        选择 学生.id, 学生.roll_num, 学生的名字, 学生.middle_name, 学生姓氏, 学生课程, student.photo_url, new_results.parano, new_results.grade 从学生内部加入 (选择std_id、parano、等级、最大值(result_date) 来自 std_id 的结果组) 作为新结果 在students.id = new_results.id上;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-28
          • 2021-06-24
          • 2014-05-12
          • 2011-03-12
          • 2012-04-26
          • 2015-01-19
          • 2012-08-06
          • 1970-01-01
          相关资源
          最近更新 更多