如何写sql语句---A表与主表有主外键关联关系,但是B表是和A表有关联关系,而不是和主表有关联关系

1,关于sql语句
问题:1,A表与主表有主外键关联关系,但是B表是和A表有关联关系,而不是和主表有关联关系,这种情况下,sql语句怎么写可以保证查询结果依然是正确的?

<select id="queryCoreStudentInfo" resultType="com.zhihuishu.virtualcourse.controller.vo.StudentVo">
        SELECT
        vt.TERM_NAME termName,
        vc.CLASS_NAME className,
        vs.STUDENT_ID studentId,
        vs.CODE code,
        vs.STUDENT_NAME studentName,
        vs.PHONE_NUMBER phoneNumber,
        vs.SCHOOL_ID schoolId
        FROM
        VC_STUDENT vs
        left join VC_CLASS vc on vc.CLASS_ID = vs.CLASS_ID AND vc.IS_DELETE = 0
        left join VC_TERM vt on vt.ID = vc.TERM_ID AND vt.ID =vs.TERM_ID  AND vt.IS_DELETE = 0
        left join VC_STUDENT_RECORD  vsr on vsr.STUDENT_ID = vs.STUDENT_ID AND vsr.CLASS_ID = vc.CLASS_ID AND vsr.TERM_ID = vt.ID AND vsr.IS_DELETE = 0
        left join VC_RECORD_MODEL vrm on vsr.ID = vrm.STUDENT_RECORD_ID AND vrm.IS_DELETE = 0
        WHERE
        vs.COURSE_ID = #{courseId}
        <if test="termId != null">
            AND vs.TERM_ID = #{termId}
        </if>
        <if test="keyWord != null and keyWord != ''">
            AND (vs.CODE like concat('%',#{keyWord},'%')
            OR vs.STUDENT_NAME like concat('%',#{keyWord},'%'))
        </if>
        <if test="hasRead!=null and hasRead == 1 ">
            AND vsr.APPLY_GRADE_STATE = 1
            AND vsr.REVIEW_STATUS = 0
        </if>
        <if test="hasGoodReport!=null and hasGoodReport == 1 ">
            AND vrm.IS_EXCELLENT = 1
        </if>
        AND vs.IS_DELETE = 0
        ORDER BY vc.TERM_ID DESC
        LIMIT #{start},#{size}
    </select>

在这个sql语句中,主表: VC_STUDENT vs,A表:VC_STUDENT_RECORD vsr,B表:VC_RECORD_MODEL vrm ,

此时,解决方法是:看这个sql,student表,
先关联了VC_CLASS表,所以on中写的是这两张表的关系,
然后又关联了VC_TERM表,所以on后面写的是VC_TERM表和前两张已经关联的表的关联关系。
然后又关联了VC_STUDENT_RECORD 表,所以on后面写的是VC_STUDENT_RECORD 表和前面的所有表有的所有关联关系。
然后又关联了VC_RECORD_MODEL 表,所以on后面写的是VC_RECORD_MODEL 表和前面已经关联的表的所有关联关系。

而且注意:每一个on后面都加了此表.IS_DELETE = 0,这种条件是可以写在on里面的,而主表的.IS_DELETE = 0写在了where条件语句里面。

这样写,sql的执行结果就可以是自己想要看到的效果。

猜你喜欢

转载自blog.csdn.net/weixin_43228497/article/details/113184399
今日推荐