如果I1,I3都不是NULL,这个SQL就没有问题.下面的SQL是针对NULL值的一种处理
前提:I1不是NULL,但R1存在NULL值
1.SELECT * FROM TABLENAME WHERE R1 <> I1
这条SQL找不出R1值是NULL的记录.
SELECT * FROM TABLENAME WHERE R1 <> I1 OR R1 IS NULL
这条SQL可以找出R1值是NULL的记录.

解决方案 »

  1.   

    Select Isnull(R1,''),Isnull(R2,''),Isnull(R3,'') From Tablename
    Where R1=I1 And R3=I3
      

  2.   

    SELECT R1, R2, R3 FROM dbname
      WHERE
      (ISNULL(R1, '')='' OR R1='I1') AND
      (ISNULL(R2, '')='' OR R2='I2') AND
      (ISNULL(R3, '')='' OR R3='I3')
      

  3.   


    ether说的就可以,不过如果你想做成模糊查询的话,
    最好还是自己组合sql语句。is null是很慢的。
    做成这种通用的语句,速度恐怕会受不了
      

  4.   

    请到http://www.etechbase.net/advsearch.php,将你这个问题输入到检索框,然后选择准确匹配查询,应该可以帮助你解决这个问题的。
      

  5.   

    如果能够利用R1,R2,R3字段上的索引,使用 R1=I1 OR I1 IS NULL 会非常满(table scan)
    最好根据I1,I2,I3自己组织sql语句,缺点是需要对数据库对象有直接的访问权限.在Ms sql中强烈推荐
      

  6.   

    假设表中字段数为n,建立n个输入框text1,index=0~n-1,rs为表的记录集
    sqlstr="select * from tblname"
    wherestr=""
    for i=0 to n-1
      if not text1(i).text="" then
         wherestr=wherestr & rs.fields(i).name & "='" & text1(i).text & "' and"
         ‘注意如果是数字型字段则去掉单引号
      end if
    next i
    wherestr=left(wherestr,len(wherestr)-4) '去掉最后的 and
    sqlstr=sqlstr+wherestr   '最终的查询语句