我从同事那里继承了一些代码,我注意到一些代码不一致的方式 例如,以下内容之间存在任何功能差异:
sum(case when (elephants = 0)then 1 else 0 end),
sum(case when (elephants = '0')then 1 else 0 end),
sum(case when (elephants IN (0))then 1 else 0 end),
sum(case when (elephants IN ('0'))then 1 else 0 end);
如果在查找单个值时使用单个qutoes或IN vs =之间没有功能差异,还有什么其他原因可以解释它(除了草率代码)?
答案 0 :(得分:3)
x IN (a, b, c)
表示x = a OR x = b OR x = c
。当IN
列表包含单个项目时,x IN (a)
仅表示x = a
。
至于0
和'0'
之间的差异,前者是整数,后者是字符串。后者可以转换为整数,因此当elephants
也是整数时,elephants = 0
和elephants = '0'
也会测试同样的事情。
四者之间没有真正的区别。
答案 1 :(得分:1)
=
用于单个值,但IN
可以在一个集合中包含多个值。
=
a = b
但是IN
,而不是写多个OR
a = 1 OR a = 2 or a = 3
你可以把它写成
a IN (1,2,3)
关于单引号,如果列的数据类型是数字,则服务器会自动将字符串值解析为数值。
答案 2 :(得分:1)
简而言之:
= 0 //equal to the number zero
= '0' //equal to the string "0"
IN (0) //appears in the list in parenthesis. In this case, the single-item list of numerical zero
IN ('0') //appears in the list in parenthesis. In this case, the single-item list of string "0"