时间:2021-07-01 10:21:17 帮助过:13人阅读
MySQL中对查询的结果集取交集如何实现
需求:通过入学批次、层次、课程名称、专业和统考科目 为教学课程与统考科目设定对应关系,可通过选多个专业对教学课程与统考课程进行对应。
问题:级联---入学批次影响层次,入学批次与层次影响专业、入学批次层次与专业影响课程名称。当选了多个专业时,课程名称下拉框如何显示多个专业共有的课程(如果不能保证课程共有,可能会添加一些专业没有的课程对应关系)呢。
解决方案:
为了从略,这里只写出入学批次层次与专业影响课程名称的级联,也就是通过入学批次层次与专业来查询课程名称,传值都用ID,查询参数设置省略了。
方案一、临时表:
String queryBasic= “select model from ” ;
StringBuilder queryString=new StringBuilder();
queryString.append(queryBasic);
For(int i=0;i queryString.append(“(select model from TeachingPlan_CourseDetail model where model.grade=:grade and model.educationLevel and model.specialId=:specialId) a”); queryString.append(i+ “”); if(i queryString.append(“,”); } } If(specialIds.length>1){ queryString.append(“ where a”); queryString.append(1+ “”); queryString.append(“. specialId” if(i queryString.append(“=”); } } 方案二、交集join String queryBasic= “select model from ”; StringBuilder queryString=new StringBuilder(); queryString.append(queryBasic); For(int i=0;i queryString.append(“(select model from TeachingPlan_CourseDetail model where model.grade=:grade and model.educationLevel and model.specialId=:specialId) as a ”); queryString.append(i+ “”); if(i queryString.append(“cross”); } } If(specialIds.length>1){ For(int i=0;i queryString.append(“a”+i); queryString.append(“.specialId”); if(i queryString.append(“=”); } } } 方案三、子查询与上面类似,略。