系统有一张表有 项目部门、项目名称等字段,在页面上有一个查询功能,有项目部门、项目名称两个输入项,如何用SQL语句实现复合查询,当用户只填写了项目部门或者项目名称中一项时,按照一项进行查询;两项都填写了时,按照两项查询。

解决方案 »

  1.   

    类似string sql="select * from table where 1=1 ";if(项目部门输入)
    {
      sql+=" and 项目部门条件"
    }
    if(项目名称输入)
    {
      sql+=" and 项目名称条件"
    }
      

  2.   

    我的意思是在SQL语句里判断,不在页面上进行判断。这条SQL语句是固定的。
      

  3.   

    你看是这个意思吗? 条件为空就不加到where子句中去: 
    SQL> begin
      2  :ename:='FORD';
      3  end;
      4  /PL/SQL 过程已成功完成。SQL> print :ename;ENAME
    --------------------------------
    FORDSQL> select empno,ename from emp where (ename=:ename or :ename is null);     EMPNO ENAME
    ---------- ----------
          7902 FORDSQL> begin
      2  :ename:=null;
      3  end;
      4  /PL/SQL 过程已成功完成。SQL> select empno,ename from emp where (ename=:ename or :ename is null);     EMPNO ENAME
    ---------- ----------
          7369 SMITH
          7499 ALLEN
          7521 WARD
          7566 JONES
          7654 MARTIN
          7698 BLAKE
          7782 CLARK
          7788 SCOTT
          7839 KING
          7844 TURNER
          7876 ADAMS     EMPNO ENAME
    ---------- ----------
          7900 JAMES
          7902 FORD
          7934 MILLER已选择14行。在这个帖子里有讨论,可以看一下:
    http://topic.csdn.net/u/20081128/09/5c7e8313-f4a2-4a11-9455-a4b9dc6c9702.html
      

  4.   


    select * 
    from project 
    where projectDep like '%s%' or projectName like '%s%';
      

  5.   

    那就直接
    字段 like '%'+输入值+'%'如果没有输入值则 like '%%'相当于全部数据
      

  6.   

    类似的存储过程实现吧create or replace procedure pro(v_1 varchar2,
                                    v_2 varchar2,
                                    cu  out sys_refcursor) as
    begin
      if v_1 is not null and v_2 is null then
        open cu for
          select * from t where col1 = v_1;
      elsif v_1 is null and v_2 is not null then
        open cu for
          select * from t where col1 = v_2;
      elsif v_1 is not null and v_2 is not null then
        open cu for
          select *
            from t
           where col1 = v_1
             and col1 = v_2;
      end if;
    end;