Есть ли способ сделать тест CASE WHEN одним из результатов, вместо того, чтобы запустить его дважды? - PullRequest
0 голосов
/ 13 мая 2009

Есть ли способ использовать значение из теста 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

Есть ли способ использовать результат первого выполнения инструкции SELECT (для теста) в качестве значения THEN? Я попытался использовать «AS max_value» после первого SELECT, но он дал мне ошибку SQL.

Обновление : Ой, как заметил Том Х., я забыл «НЕ НУЛЕВО» в моем первоначальном вопросе.

Ответы [ 2 ]

5 голосов
/ 13 мая 2009

Ваше заявление работает? Это не логическое выражение в вашем операторе CASE. По умолчанию MySQL проверяет наличие значения NULL, если вы не используете логическое значение?

Я думаю, что это, вероятно, то, что вы ищете:

SELECT
     id,
     COALESCE(
     (
          SELECT
               MAX(value)
          FROM
               My_Table
          WHERE
               other_value = 1
     ), 0) AS max_value
FROM
     Other_Table
4 голосов
/ 13 мая 2009

В этом примере показано, как можно подготовить группу значений в подзапросе и использовать их в CASE во внешнем SELECT.

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 () выглядят точными копиями.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...