0

selectステートメントを2回書き出すことなく、CASE WHENテストの値を結果の1つとして使用する方法はありますか(長くて面倒なので)? 例えば:

 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 値としても使用できる方法はありますか? 最初の SELECT の後に「AS max_value」を使用しようとしましたが、SQL エラーが発生しました。

更新: おっと、Tom H. が指摘したように、元の質問で「IS NOT NULL」を忘れていました。

4

2 に答える 2

5

あなたの声明は実行されますか?CASE ステートメントのブール式ではありません。ブール値を使用しない場合、MySQL はデフォルトで NULL 値をチェックしますか?

これはおそらくあなたが探しているものだと思います:

SELECT
     id,
     COALESCE(
     (
          SELECT
               MAX(value)
          FROM
               My_Table
          WHERE
               other_value = 1
     ), 0) AS max_value
FROM
     Other_Table
于 2009-05-12T20:44:06.223 に答える
4

この例は、サブクエリで一連の値を準備し、それらを外側の SELECT の CASE で使用する方法を示しています。

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() クエリは正確なコピーのようです)。

于 2009-05-12T20:45:12.510 に答える