当我使用完全相同的查询定位不同的列时,查询不起作用

时间:2019-03-29 22:37:07

标签: mysql sql

当我定位其他列(相同数据类型)时,已知的工作查询失败。此查询有效:

Select * from assets WHERE type = '' AND os LIKE '%7%' AND status <> 'Discarded'

但是此查询无效(返回空集):

Select * from assets WHERE model = '' AND os LIKE '%7%' AND status <> 'Discarded'

唯一的区别是列type更改为model。两列均为varchar,并且有满足两个查询条件的记录。我试图在字段名称周围加上``,没有帮助。

1 个答案:

答案 0 :(得分:1)

根据注释:表达式AND status <> 'Discarded'不允许包含NULL值。

在SQL中,NULL <> 'Discarded'为假,就像NULL = 'Discarded'也为假。要检查是否为空,您需要使用IS NULL

我认为您的查询应表示为:

SELECT * 
FROM assets 
WHERE 
    model = '' 
    AND os LIKE '%7%' 
    AND (status IS NULL OR status <> 'Discarded')

注意:值得一提的是,存储空字符串通常不是一个好主意。使用NULL作为默认值通常更简单。