有没有办法让CASE WHEN测试其中一个结果而不是运行两次?

Cha*_*les 0 mysql sql code-reuse

有没有办法使用CASE WHEN测试中的值作为其结果之一,而无需写出两次select语句(因为它可能很长而且很乱)?例如:

 SELECT id,
     CASE WHEN (
         (SELECT MAX(value) FROM my_table WHERE other_value = 1) IS NOT NULL
     )
     THEN (
         SELECT (MAX(value) FROM my_table WHERE other_value = 1
     ) 
     ELSE 0
 END AS max_value
     FROM other_table
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用SELECT语句的第一次运行结果(对于测试)作为THEN值?我尝试在第一个SELECT之后使用"AS max_value",但它给了我一个SQL错误.

更新:哎呀,正如Tom H.指出的那样,我在原来的问题中忘记了"IS NOT NULL".

Tom*_*m H 5

你的陈述是否还在运行?它不是CASE语句中的布尔表达式.如果不使用布尔值,MySQL是否默认检查NULL值?

我想这可能就是你要找的东西:

SELECT
     id,
     COALESCE(
     (
          SELECT
               MAX(value)
          FROM
               My_Table
          WHERE
               other_value = 1
     ), 0) AS max_value
FROM
     Other_Table
Run Code Online (Sandbox Code Playgroud)