相当于三元运算符的 SQL 语句

Posted

技术标签:

【中文标题】相当于三元运算符的 SQL 语句【英文标题】:SQL statement equivalent to ternary operator 【发布时间】:2015-02-03 05:11:53 【问题描述】:

我想在 mysql 中创建一个等效于 (x - y == 0) ? return 0 : return 100 的语句。可能看起来像这样:

SELECT id, [(integer_val - 10 == 0) ? 0 : 100] AS new_val FROM my_table

我想将每一行中的一个属性与某个数字进行比较,如果该数字与该行中的数字之差为0,我希望它给我0,否则,我希望它给我100 .

例子:

my_table 上应用此查询(10 是“比较”数字):

id  |   integer_val
===================
1   10
2   10
3   3
4   9

会返回这个:

id  |   new_val
===================
1   100
2   100
3   0
4   0

我该怎么做?

【问题讨论】:

为什么不用case语句 【参考方案1】:

使用case when 声明:

select *, (case when integer_val = 10 then 100 else 0 end) as New_Val 
from yourtable

【讨论】:

【参考方案2】:

尝试使用IF function:

SELECT id, IF(integer_val - 10 = 0, 0, 100) AS new_val FROM my_table

(我坚持你的条件表达式,但它可以简化一点,因为integer_value - 10 = 0integer_value = 10 具有完全相同的真值。)

请注意,IF 函数不同于 MySQL 用于存储程序的 IF 语句。

【讨论】:

【参考方案3】:

试试这个:

SELECT id, IF(integer_val = 10, 100, 0) AS new_val 
FROM my_table;

SELECT id, (CASE WHEN integer_val = 10 THEN 100 ELSE 0 END) AS new_val 
FROM my_table;

【讨论】:

以上是关于相当于三元运算符的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

php 中 三元运算和 IF语句 运行速度

三目(三元)运算符??::的形式

js三元运算符与循环

Delphi - 相当于 C# 的三元运算符? [复制]

如何用三元运算符(?:)替换“if”语句?

三元运算符与 if 语句的优点