为什么SO上的人更喜欢CASE WHEN到其他选择?

时间:2017-08-11 11:25:09

标签: mysql sql

我注意到很多人似乎更喜欢CASE ... WHEN其他选择。

例如this question中的所有答案都使用CASE ... WHEN,而我会使用简单的IFIF输入的次数要少得多,并且在所有编程语言中都很流行,因此对我来说似乎有点奇怪,没有一个答案可以使用它。 (我也希望IF虽然我没有测量它但速度要快一些。)

更有趣的是this question的答案。 3个答案中的2个(其中包括已接受的答案)建议使用CASE ... WHEN,从我的观点来看COALESCE是更好的解决方案(毕竟COALESCE是针对OP的问题创建的具有)。 (另外,在这种情况下,我几乎可以肯定COALESCE会更快。)

所以,我的问题是,CASE ... WHEN是否有任何好处(抵消了额外的打字),我错过了或者是#34;对于一个有锤子的男人来说,一切都看起来像钉子"?

3 个答案:

答案 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中的问题。

此外,IF()非常接近控制流程,这使得它与大多数其他功能完全不同。