我尝试从这样一个表中选择:
SELECT * FROM table1 where id=311
and date BETWEEN '2012-09-01' And '2012-09-09'
and col2='a'
and (col3 ='m'
or col3 ='n'
or col3=' ' )
ORDER BY date
在表格中我的情况是col3的值为'm','n'或null,但是这个select不返回col3具有空值的行
答案 0 :(得分:3)
NULL
不是' '
使用col3 is null
答案 1 :(得分:2)
数据库中有三值逻辑: TRUE,FALSE,NULL(未知)
col3 =''是一个真实的条件,
col3为空是未知条件。
他们是不同的。
所以你必须使用
col3为空
您可以参考Wikipedia's "NULL" entry。
答案 2 :(得分:1)
NULL不等于'm','n'或''。 NULL甚至不等于NULL。使用:
SELECT * FROM table1 where id=311
and date BETWEEN '2012-09-01' And '2012-09-09'
and col2='a'
and (col3 ='m'
or col3 ='n'
or col3 IS NULL)
ORDER BY date
答案 3 :(得分:1)
SELECT *
FROM table1
where
id=311
and date BETWEEN '2012-09-01' And '2012-09-09'
and col2='a'
and (
col3 ='m'
or col3 ='n'
or col3 is null
)
ORDER BY date
答案 4 :(得分:1)
这是避免OR列表的一个很好的技巧,也避免使用OR IS NULL
:
SELECT *
FROM table1
WHERE id=311
AND zdate BETWEEN '2012-09-01' AND '2012-09-09'
AND col2='a'
AND COALESCE(col3, 'm') IN ('m', 'n' )
ORDER BY zdate
;