提问者:小点点

MySQL多个if语句


我对MySQL查询有一个问题。 我有一个从多个表中进行选择的大查询,它工作得很好。 我想编辑它的一小部分。

这是我要编辑的一小部分。 这部分工作正常,但我想添加另一个if语句。

round(if(m.id in (2280659, 2300116,3612005, 5309555), m.duration / 100, m.duration) / 60,1) as "Activity time in minutes"

我希望它是这样的东西,但我似乎不能得到正确的语法。 我尝试了一个嵌套的if示例,我在网上找到,但这给了我语法错误。

round(if(m.id in (2280659, 2300116,3612005, 5309555), m.duration / 100, m.duration, if m.id in (12312323, 2323232), m.duration / 1000, m.duration)) / 60,1) as "Activity time in minutes"

如果M.ID为(2280659,2300116,3612005,5309555),我要M.Duartion/100;如果M.ID为(12312323,2323232),我要M.Duration/1000

希望我说得够清楚了。 如果有人能为我指明正确的方向,我将不胜感激,谢谢!

编辑1:更改了查询以匹配括号计数,但仍然没有成功。

round(if(m.id in (2280659, 2300116,3612005, 5309555), m.duration / 100, m.duration, if (m.id in (12312323, 2323232), m.duration / 1000, m.duration)) / 60,1) as "Activity time in minutes"

错误消息:

mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception:您的SQL语法中有一个错误; 检查与您的MySQL server版本相对应的手册中是否有正确的语法,以便在第3行的“if(m.id in(12312323,2323232),m.duration/10000,m.duration))/60,1)附近使用”Tegevuse kest


共2个答案

匿名用户

IF()构造是

IF( condition is true, use this answer, else this answer)

在你尝试筑巢的时候,你需要

IF( condition, this, IF( second condition, this, else default ) )

你也可以使用case/when,这可能会让你更容易理解

round( case when m.id in (2280659, 2300116,3612005, 5309555)
               then m.duration / 100
            when m.id in (12312323, 2323232)
               then m.duration / 1000
            else m.duration end
     / 60,  1) as "Activity time in minutes"

匿名用户

编辑1:更改了查询以匹配括号计数,但仍然没有成功。

经过漂亮的格式化后,问题就显现出来了:

round( 
       if( 
           m.id in (
                     2280659, 2300116,3612005, 5309555
                   ), 
           m.duration / 100, 
           m.duration, 
           if( 
               m.id in (
                         12312323, 2323232
                       ), 
               m.duration / 1000, 
               m.duration
             )
     ) / 60, 1
) as "Activity time in minutes"
  1. 外部IF()有4个参数
  2. 最后的右括号没有匹配的开头括号。