0

我尝试从这样的一张表中进行选择:

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 的情况,但此选择不返回 col3 值为 null 的行

4

5 回答 5

3

NULL' '是使用以外的东西col3 is null

于 2012-09-12T09:28:16.763 回答
2

数据库中存在三值逻辑: TRUE, FALSE, NULL(unknown)

col3 ='' 是一个真实的条件,

col3 为 null是未知条件。

它们不一样。

所以你必须使用

col3 为空

您可以参考维基百科的“NULL”条目

于 2012-09-12T09:53:51.790 回答
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
于 2012-09-12T09:29:11.240 回答
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
于 2012-09-12T09:29:35.263 回答
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
   ;
于 2012-09-12T09:34:55.047 回答