2009-05-12 5 views
0

CASE WHENテストの値をselect文を2度書くことなく、その結果の1つとして値を使用する方法はありますか(長くて面倒かもしれません)。たとえば:2回実行するのではなく、結果の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 

は私もTHEN値として(テスト用)SELECTステートメントの最初の実行の結果を使用することができる方法はありますか?最初のSELECTの後に "AS max_value"を使ってみましたが、SQLエラーが出ました。

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

答えて

4

この例では、サブクエリの値の束を用意し、外側の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は()クエリの正確なコピーであるように思われる。)彼が望んでいる、おそらく何

+0

トム・Hの答えの中のCOALESCE関数は、私が実際にやっているところに行くためのきれいな方法ですが、これは私の質問に対する実際の答えでした。最初にサブクエリで定義するとは思わなかった。 – Charles

5

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

SELECT 
    id, 
    COALESCE(
    (
      SELECT 
       MAX(value) 
      FROM 
       My_Table 
      WHERE 
       other_value = 1 
    ), 0) AS max_value 
FROM 
    Other_Table 
+0

+1グッドキャッチし、 ! 1つのケースの結果を2か所でどのように使用するかは示されていませんが、 – Andomar

+0

これはまさに私が進めてきたことです。SELECTステートメントの値がNULLでない場合はそれを使用したかったのですが、それ以外の場合は別の値でした。私はそれを明確にしていませんでしたが、私の心を読んでくれてありがとう! – Charles

関連する問題