需求
1.前端有3个分别位于3个表的参数作为查询条件,随机组合
2.关联2个表
3.模糊查询
4.分页查询
5.排序
遇到的问题
楼主一开始的写法是,先查出A表(主)的结果再去关联B和C,然后在次外层写B和C的条件。这样写的结果是查询的时候正常不报错,但是没有任何结果,检查SQL后没有任何错误,多方百度无结果!
换了一种写法
于是,抱着试一试的态度,改变SQL写法竟然发现查询可行,这种写法是:将所有与分页无关的where都放在最内层
/********** 部分代码如下(strWhere是查询条件组成的where语句) **********/
string SQL = "SELECT * FROM (SELECT D.ID,D.REALNAME,D.NAME ORGANIZATIONNAME,D.CERTIFICATEDATE,D.CERTIFICATETYPE,D.CERTIFICATERESULT,ROWNUM RN FROM \n" +
"(SELECT A.*, B.REALNAME, C.NAME FROM CERTIFICATERECORD A \n" +
"JOIN ACCOUNT B ON A.USERID = B.ID \n" +
"JOIN ORGANIZATION C ON A.ORGANIZATIONID = C.ID \n" +
""+ strWhere +" ORDER BY A.INDATE DESC) D \n" +
"WHERE ROWNUM <= :pn * :ps) WHERE RN > (: pn - 1) * :ps";
DataSet ds = new DataSet();
try
{
connection.Open();
OracleDataAdapter command = new OracleDataAdapter(SQL, connection);
if (zhenShiXM.Length > 0)
{
command.SelectCommand.Parameters.Add(":zhenShiXM", zhenShiXM);
}
分析原因
楼主想了很久也没弄明白这种写法引发的问题到底是怎么回事(也欢迎各位小伙伴们指正),不过在当前需求下where放于最内层的写法确实可行
总结
Oracle数据库连接多个表参数化分页模糊多层查询时,除分页以外的where条件要放在最内层,不要先查出主表的结果再去关联其他表,然后在次外层写其他表的查询条件