Есть ли способ, которым я могу сделать ТАК, чтобы протестировать один из результатов, а не запускать его дважды?
-
21-08-2019 - |
Вопрос
Есть ли способ использовать значение из CASE WHEN test в качестве одного из его результатов, не записывая оператор 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?Я попытался использовать "КАК max_value" после первого выбора, но это выдало мне ошибку SQL.
Обновить:Упс, в роли Тома Х.обратите внимание, я забыл "НЕ РАВНО НУЛЮ" в моем первоначальном вопросе.
Решение
Этот пример показывает, как вы можете подготовить набор значений в подзапросе и использовать их в СЛУЧАЕ внешнего выбора.
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 по умолчанию нулевое значение, если вы не используете логическое значение?
Я думаю, что это, вероятно, то, что вы ищете:
SELECT
id,
COALESCE(
(
SELECT
MAX(value)
FROM
My_Table
WHERE
other_value = 1
), 0) AS max_value
FROM
Other_Table