如果其中一个类似的变量为空,我注意到我的查询行为不正确:
SELECT name
FROM employee
WHERE name LIKE '%a%'
AND color LIKE '%A%'
AND city LIKE '%b%'
AND country LIKE '%B%'
AND sport LIKE '%c%'
AND hobby LIKE '%C%'
现在当a和A不为空时它可以工作但是当a,A和c不为空时,c部分不会被解雇,所以看起来好像?
我该如何解决这个问题?
答案 0 :(得分:2)
使用IF()
功能....
SELECT name
FROM employee
WHERE ( IF(LENGTH('%a') > 0, name LIKE '%a%' , 0)
OR IF(LENGTH('%A') > 0, color LIKE '%A%', 0)
OR IF(LENGTH('%b') > 0, city LIKE '%b%' , 0)
OR IF(LENGTH('%B') > 0, country LIKE '%B%', 0)
OR IF(LENGTH('%c') > 0, sport LIKE '%c%' , 0)
OR IF(LENGTH('%C') > 0, hobby LIKE '%C%' , 0)
)
sql查询的where子句正在从true/false
逻辑中查找AND/OR
结果。因此,您可以从true/false
函数返回要测试的表达式,或测试结果或原始硬IF()
值。
答案 1 :(得分:0)
我假设你想做一个过滤器,你只检查过滤器值是非空的值。在这种情况下,请检查变量中的无效值作为替代条件。
select name
from employee
where (@a is null or name like '%' + @a + '%')
and (@b is null or color like '%' + @b + '%')
...