比方说有如下几个查询选项
1.姓名
2.性别 int值
3.年龄
4.籍贯
5.生日 datatime值可单独查询也可以多项查询
各位,这样的查询怎么做,sql怎么写?

解决方案 »

  1.   

    假如分开写 那就有2*2*2*2*2=32种可能
    那就要写32条sql 那样肯定不现实
      

  2.   

    select 姓名,性别,年龄,籍贯,生日 from table
      

  3.   

    ls的 不是这样的
    应该是select * from table where 姓名=…………
    然后有5个查询条件 都是可空的
    就说是有32种可能
      

  4.   

    string sql = select * from table where 1=1 "
    if(姓名!="")
    {
      sql += " and 姓名 ='" + 姓名 + "'"
    }
    if(姓名!="")
    {
      sql += " and 性别 ='" + 性别 + "'"
    }
    .......或是直接用Like 
      

  5.   

    可以这样吧楼主,
    string a="select "
    if(XX = 姓名)
    {
       a+= 姓名,
    }
    if(XX = 性别)
    {
       a+= 性别,
    }
    ...string b= form 表string sql=a+b;不知道行不?我笨人就想到这么个笨法!!
      

  6.   

    需要作為查詢條件的就傳參數進來,不需要作為查詢條件的就直接穿"ALL"進來
    select * from tablename where 姓名='@姓名' OR '@姓名'='ALL'
      

  7.   

    要是单一查一个的.where后面加要查询的,还需要那么多条件干吗???直接姓名,年龄,差不多都筛选出来了吧.
      

  8.   

    select * from (select * from table where ……) where ……本来是想用嵌套的办法去做
    假如查询值全是string值的话是可以实现的
    但是问题是:里面有不少int值和datatime值这样System.DateTime startDate = Convert.ToDateTime(TextBox3.Text.Trim());
    假如TextBox3是空的话是转换不到datatime的
    还是要去判断TextBox3是否为空又回到问题的原点了实在是苦恼 想不到解决的办法
      

  9.   

    如果只是查询条件的话,将它们组成一个string就可以了吧你的意思是sql语句可能是select * from table where a=a,select * from table where a=a and b=b等等查询条件不同的意思吧?不明白为什么会出现“select * from (select * from table where ……) where …… ”这种写法……至于判断,那本身就是一定需要的。写个实际例子?
      

  10.   

    string sql = select * from table where 1=1 "  
    if(姓名!="")  
    {  
      sql += " or 姓名 ='" + 姓名 + "'"  
    }  
    if(姓名!="")  
    {  
      sql += " or 性别 ='" + 性别 + "'"  
    }  
    .......  
    应该用OR
    估计楼主的意思是空的就不查,不空的就的参数就查
      

  11.   


    是的 就是你说的
    假如有2个查询项 那就是有4种可能
    select * from table where a=a
    select * from table where b=b
    select * from table where a=a and b=b
    select * from table 
    4种情况 我大不了全部罗列出来 也无所谓但是万一有10个查询项 那就是2的10次方种情况
    这样穷举所有的情况,一一写出sql
    我觉得总归是不现实的至于select * from (select * from table where ……) where ……  那就是查询的嵌套 全是string值的时候可行
      

  12.   


    应该是用and 属于联合查询
      

  13.   

    全部用AND连接就可以了,我公司的匡架就是这样做的
      

  14.   

    只要判断传了几个参数就可以了,在用AND连接搞定,给分
      

  15.   

    说下我的方法
    写个方法获取查询条件,返回hashtable
    public hashtable getJoken()
    {
      hashtable ht = new hashtable ();
      if(string.isnullorempty(name.text))
      {
        ht.add("name",name.text);
      }
      ...
    }
    然后再逻辑层判断条件
    如果取到
    ht["name"] == null
    则放弃该条件
    反之追加
    " and name ='" + ht["name"]。tostring() + "'" 
    最后拼接成一个查询条件即可。
      

  16.   

    public DataTable Fetch()
    {
        oleConn.Open();
        string strSql="select * from Table";
        oleDbDataAdapter oleDap=new oleDbDataAdapter(strSql,oleConn);
        DataSet ds=new DataSet();
        oleDap.Fill(ds);
        return ds.Tables[0];
    }
    在用户界面写相应的语名就可以了
    strSql中的Table是数据库的表名
    谢谢支持
      

  17.   


    你的写法没必要你是将简单问题复杂化了。假如是10个条件,即使你的写法是成立的,也等于要在数据库里进行10次查询。数据量一大就完蛋了。你还没理解我们说组成语句的意思,组语句根本不必先把所有情况罗列出来,而是应该需要一种情况才添加一种条件。大约应该是这样写string s1 = "select * from table";
    然后
    string s2 = " where 1=1"
    当需要增加条件的时候,比如需要a=a的条件就这样
    if (NeedA()) //判断方法名字只是我随便写的
     s2 += " and a=a";
    if (NeedB())
     s2 += " and b=b";
    ...
    这样写下去,1万个条件都能加进去然后整个查询串就是s1 + s2完成
      

  18.   

    把所有的条件全传进去,空的就传null,做一存储过程,把全部条件整合一下,再查,是不是也行呀!