有没有一种办法可以让的情况下的结果的一个测试,而不是运行它两次?
-
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
不隶属于 StackOverflow