Oracle数据库连接多个表参数化分页模糊多层查询的问题

需求

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条件要放在最内层,不要先查出主表的结果再去关联其他表,然后在次外层写其他表的查询条件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容