我注意到很多人似乎更喜欢CASE ... WHEN
其他选择。
例如this question中的所有答案都使用CASE ... WHEN
,而我会使用简单的IF
。 IF
输入的次数要少得多,并且在所有编程语言中都很流行,因此对我来说似乎有点奇怪,没有一个答案可以使用它。 (我也希望IF
虽然我没有测量它但速度要快一些。)
更有趣的是this question的答案。 3个答案中的2个(其中包括已接受的答案)建议使用CASE ... WHEN
,从我的观点来看COALESCE
是更好的解决方案(毕竟COALESCE
是针对OP的问题创建的具有)。 (另外,在这种情况下,我几乎可以肯定COALESCE
会更快。)
所以,我的问题是,CASE ... WHEN
是否有任何好处(抵消了额外的打字),我错过了或者是#34;对于一个有锤子的男人来说,一切都看起来像钉子"?
答案 0 :(得分:5)
实际上,一个好的原因之一是CASE WHEN
表达式符合ANSI标准,IF
表达式不符合ANSI {1}}。如果有人将MySQL查询移植到另一个数据库,MySQL中的IF
调用可能都需要重写。
与大多数数据库一样,MySQL通过引入IF()
函数来扩展ANSI。也许IF
或类似的东西有一天会成为标准的一部分。
答案 1 :(得分:3)
CASE WHEN
符合SQL标准。 IF
不是。由于SQL数据库确实有很多不同的方言,因此坚持使用适用于大多数数据库的代码并不是最糟糕的,原因如下:
如果您养成使用特定于一个数据库的代码的习惯,那么在处理另一个数据库时会遇到麻烦。
如果您使用特定于一个数据库的代码,则只需复制粘贴它们就无法使用其他数据库测试您的查询。您也无法在不更改SQL查询的情况下将应用程序迁移到其他数据库。
答案 2 :(得分:1)
CASE WHEN
是条件表达式的ANSI标准表达式。 IF()
是MySQL特有的功能。
一般情况下,我更喜欢ANSI标准功能 - 尽管偶尔有例外。
特别关于IF()
作为函数。在MySQL中,它很容易与IF
混淆。使用它作为一个函数似乎是不必要的混淆(诚然,还有其他数据库,其中CASE
可能与脚本语言中的CASE
语句混淆,但这不是MySQL中的问题。/ p>
此外,IF()
非常接近控制流程,这使得它与大多数其他功能完全不同。