MySQL中對查詢的結果集取交集如何實現
需求:通過入學批次、層次、課程名稱、專業和統考科目 為教學課程與統考科目設定對應關系,可通過選多個專業對教學課程與統考課程進行對應。
www.2cto.com
問題:級聯---入學批次影響層次,入學批次與層次影響專業、入學批次層次與專業影響課程名稱。當選了多個專業時,課程名稱下拉框如何顯示多個專業共有的課程(如果不能保證課程共有,可能會添加一些專業沒有的課程對應關系)呢。
解決方案:
為了從略,這裡只寫出入學批次層次與專業影響課程名稱的級聯,也就是通過入學批次層次與專業來查詢課程名稱,傳值都用ID,查詢參數設置省略了。
方案一、臨時表:
String queryBasic= “select model from ” ;
StringBuilder queryString=new StringBuilder();
queryString.append(queryBasic);
For(int i=0;i<specialIds.length();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<specialId.length()-1){
queryString.append(“,”);
}
}
If(specialIds.length>1){
queryString.append(“ where a”);
queryString.append(1+ “”);
queryString.append(“. specialId”
if(i<specialId.length()-1){
queryString.append(“=”);
}
}
方案二、交集join
String queryBasic= “select model from ”;
StringBuilder queryString=new StringBuilder();
queryString.append(queryBasic);
For(int i=0;i<specialIds.length();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<specialId.length()-1){
queryString.append(“cross”);
}
}
If(specialIds.length>1){
For(int i=0;i<specialIds.length();i++){
queryString.append(“a”+i);
queryString.append(“.specialId”);
if(i<specialId.length()-1){
queryString.append(“=”);
}
}
}
方案三、子查詢與上面類似,略。