首页 > 学院 > 开发设计 > 正文

sql中where和on的区别

2019-11-09 13:37:33
字体:
来源:转载
供稿:网友
最近在做公司项目,遇到一个棘手的问题,在根据试题id查询试题选项的时候需要查询他对应的关联的能力,但是如果没有在关联表中不存在选项和能力的关系,选项也会查询不出来。有问题的sql: SELECT exam_options.id, exam_options.QST_ID, exam_options.OPT_CONTENT, exam_options.OPT_ORDER, exam_options.OPT_ANSWER, exam_options.ADDTIME, exam_options.OPT_ANALYZE, exam_options.OPT_MASTER, edu_question_ability_relation.id, edu_question_ability_relation.abilityName, edu_question_ability_relation.abilityId FROM exam_options,edu_question_ability_relation where edu_question_ability_relation.optionId=exam_options.id AND edu_question_ability_relation.questionId=exam_options.QST_ID <if test="qstId!=null and qstId!=0"> AND exam_options.QST_ID = #{qstId} </if> 修改后sql: SELECT exam_options.id, exam_options.QST_ID, exam_options.OPT_CONTENT, exam_options.OPT_ORDER, exam_options.OPT_ANSWER, exam_options.ADDTIME, exam_options.OPT_ANALYZE, exam_options.OPT_MASTER, edu_question_ability_relation.id, edu_question_ability_relation.abilityName, edu_question_ability_relation.abilityId FROM exam_options,edu_question_ability_relation where edu_question_ability_relation.optionId=exam_options.id AND edu_question_ability_relation.questionId=exam_options.QST_ID <if test="qstId!=null and qstId!=0"> AND exam_options.QST_ID = #{qstId} </if> 对于入场不久的小白,其间经历了各种尝试,左连接也用过,还是不行,最后经过强大的百度,看别人写的代码,试了试才明白原来where和on不是一回事。

在使用left join时,on and和on where条件的区别如下(以下内容为复制): 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表