有没有一种办法可以让的情况下的结果的一个测试,而不是运行它两次?

StackOverflow https://stackoverflow.com/questions/854747

  •  21-08-2019
  •  | 
  •  

有没有使用来自CASE值当测试作为其结果的一个没有写出来的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

有没有一种方法我可以使用SELECT语句(测试)的第一次运行的结果作为THEN值呢?我试着用“AS MAX_VALUE”后的第一个选择,但它给了我一个SQL错误。

更新:哎呀,汤姆·H.指出,我忘了在我原来的问题了 “IS NOT NULL”

有帮助吗?

解决方案

这个例子展示了如何可以在子查询中制备一束值,并且在所述外选择区分使用它们。

select
    orderid,
    case when maxprice is null then 0 else maxprice end as maxprice
from (
    select
        orderid = o.id,
        maxprice = (select MAX(price) from orderlines ol 
                    where ol.orderid = o.id)
    from orders o
) sub

不知道如果这就是你以后,这个问题目前还不清楚(例如,你的2 MAX()查询显示是精确的拷贝。)

其他提示

请问你甚至声明运行?这是不是在你的CASE语句中的布尔表达式。请问MySQL的默认检查NULL值,如果你不使用一个布尔?

我觉得这可能是你在找什么:

SELECT
     id,
     COALESCE(
     (
          SELECT
               MAX(value)
          FROM
               My_Table
          WHERE
               other_value = 1
     ), 0) AS max_value
FROM
     Other_Table
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top