本人是新手,想做一个单表的复合查询后台。现在情况是加and条件后可以轻松实现复合查询,但问题是这样就不能单独查询了。
比如: select * from mytable 建年=‘1955-10-10’and 录入期='2010-10-10' 但这样的话,在客户端单选建年或者录入期就会返回一个空数据,只能有同满足两个条件才返回数据。请高手指点一下。实现复合查询后怎么才能单独查询也有用。谢谢。

解决方案 »

  1.   

    直接select * from mytable 建年=‘1955-10-10’?
      

  2.   

    select * from mytable where 
     建年='1955-10-10' and 录入期 is null
    or (录入期 is null and 录入期='2010-10-10' )or(录入期='1955-10-10' and 录入期='2010-10-10' )
      

  3.   

    SQL codeselect * from mytable where 
     (建年='1955-10-10' and 录入期 is null)
    or (录入期 is null and 录入期='2010-10-10' )or(录入期='1955-10-10' and 录入期='2010-10-10' )
      

  4.   

    select
       case when 建年=‘1955-10-10’ and 录入期 is null then ...else ''end ,
       case when 录入期 is null and 录入期='2010-10-10' then ... else '' end,
       case when 录入期='1955-10-10' and 录入期='2010-10-10' then ... else '' end
    from
       tb
      

  5.   

    除非写城存储过程,其实判断一下就可以了
    if  else
      

  6.   

    楼主想的太复杂了吧。按照你的理论来说这两个条件是完全没有关系的条件,也就是说得到查询结果的时候没必要同时提供2个条件才能给出结果,没必要用and连接啊。如果你编写过数据库相关的程序你就会了解到,不断的输入限制条件就是不断的组装where条件。彼此之前没有联系的
      

  7.   

    这是程序构造SQL语句逻辑问题,var strSQL;
    strSQL='select * from mytable Where 1=1'If{客户端单选建年<>Null}
      strSQL=strSQL & ' And 建年=''1955-10-10'''If{输入录入期<>Null}
      strSQL=strSQL & ' And 录入期=''1955-10-10'''执行strSQL语句
      

  8.   

    估计你编写程序的时候固定好了 建年=‘1955-10-10’and 录入期='2010-10-10'  这样一个where语句模式,。导致了如果录入期没有填入,系统有个默认时间,那么会变成建年=‘1955-10-10’and 录入期='1900-00-00'这样个where语句。自然就没有返回结果了。
      

  9.   

    用OR条件组合起来即可.
    select * from mytable where 
    (建年='1955-10-10' and 录入期='2010-10-10') or
    (建年 is null and 录入期='2010-10-10') or
    (建年='1955-10-10' and 录入期 is null) 
      

  10.   


    我看这个方法很简单,但试了下没有用,我客户端的控件是    建年:<select id="Select1" name="建年">
            <option value="">-请选择-</option>
             <option value="1970-10-10">-1970-10-10</option>是不是value=""不等于null所以还是不能单选。复选可以。还请继续帮忙。
      

  11.   

    "select * from table1 where (建年='" + myaaa2 + "' and 录入期 is null) or (建年 is null and 录入期='" + myaaa6 + "' ) or (建年='" + myaaa2 + "' and 录入期='" + myaaa6 + "' )"; 其实myaaa2和myaaa6为变理。安道理语句是没有错了。我检了很多遍。 但我客户端控件默认不选择时value值等于为一个""空字符串
     如:<option value="">-请选择-</option>是不是出在""不等null造成的。
      

  12.   

    其中myaaa2和myaaa6为变量。上面打错了
      

  13.   

    写个动态的where 语句。默认为where 1>0 然后判断控件,如果空间是默认不选的情况,那就不做动作,如果选了建年日期,那么写 where=where+" and 建年="+myaaa2  如果选了录入期那么写 where=where+" and  录入期="+myaaa6。如果两个都选也没问题。where自动组装语句了