select field from table where field = 'value'
select field from table where field in ('value')
我问的原因是第二个版本允许我对空值使用相同的语法,而在第一个版本中我需要将条件更改为'其中field为null' ...
答案 0 :(得分:1)
当您将字段与field_name=NULL
之类的空格进行比较时,您要将字段中的已知数据类型varchar
与不仅未知的值进行比较,还要将未知数据类型进行比较,也就是说,对于NULL
值。当像field_name=NULL
之类的比较再次意味着检查两者的数据类型时,即使字段的值实际为NULL
,也无法比较两者,因此它总是会导致{{1} }。但是,使用false
只是比较值本身而没有数据类型的隐含比较,因此可能会导致IS NULL
或false
,具体取决于字段的实际值。
请参阅here有关计算机科学中true
和here与问题相似性的问题。
现在,对于IN子句(即NULL
),我不知道你正在使用什么RDBMS,因为当我用MS SQL和MySQL尝试它时,它什么也没有结果。
答案 1 :(得分:0)
你的例子没有区别。第二个稍长的查询通常不用于单个值,通常可以看到多个值,例如
select field from table where field in ('value1', 'value2')
答案 2 :(得分:-1)
是的,这两个查询都有区别。在第一个参数中,您只能在where子句&#34中插入1个值;其中field =' value'"但是在where where字段的第二个语句中你可以使用IN子句&#34来插入许多值;其中field in(value1,value2 ..)" 例子:
1) select field from table where field ='value1';
2) select field from table where field in ('value1', 'value2')
检查空值
SELECT field
FROM tbl_name
WHERE
(field IN ('value1', 'value2', 'value3') OR field IS NULL)