mySQL变量搜索null变量

时间:2012-11-14 23:01:33

标签: mysql

我有一个包含5列的表 - col1,co12,...我在每列上搜索了5个搜索参数。我需要编写一个mySQL查询,它将返回所有匹配的结果。如果我没有为搜索参数提供值,则会忽略它。

我有这个,但它不起作用

select * from tableA
where ((col1 IS NULL AND srch1 IS NULL) OR (col1 like srch1))
and ((col2 IS NULL AND srch2 IS NULL) OR (col2 like srch2))
etc...

3 个答案:

答案 0 :(得分:0)

Select * from tableA where
col1 like '%' + Coalesce(srch1,col1) + '%' and
col2 like '%' + Coalesce(srch2,col2) + '%'

答案 1 :(得分:0)

我认为“不工作”是指您的条件的like部分不起作用。

那是因为你必须用%个字符包裹搜索字符串以形成“喜欢”的搜索字词。试试这个:

select * from tableA
where ((col1 IS NULL AND srch1 IS NULL) OR col1 like concat('%', srch1, '%'))
and ((col2 IS NULL AND srch2 IS NULL) OR col2 like concat('%', srch2, '%'))
etc...


你非常接近!

答案 2 :(得分:0)

通过在parens中将每个条件与自身进行OR运算,并首先测试null,这将预先限定条件并忽略另一半。如果有一个值,则根据相应的列进行测试。现在,那就是说,如果你真的需要一个“LIKE”限定符,那么你可能需要期望,或者在'%'上加上通配符匹配。

select
      A.* 
   from 
      tableA  A
   where 
          (srch1 is null OR col1 like srch1)
      AND (srch2 is null OR col2 like srch2)
      AND (srch3 is null OR col3 like srch3)
      AND (srch4 is null OR col4 like srch4)
      AND (srch5 is null OR col5 like srch5)

因此,如果您只提供了srch3参数,那么答案将被解释为

where 
       TRUE
   and TRUE
   and col3 like srch3
   and TRUE
   and TRUE
自从srch?如果为null将首先为真,并忽略该测试的其余部分。