Gibt es eine Möglichkeit ich den Fall machen kann, wenn Test eines der Ergebnisse, anstatt sie zweimal ausgeführt wird?

StackOverflow https://stackoverflow.com/questions/854747

  •  21-08-2019
  •  | 
  •  

Frage

Gibt es eine Möglichkeit, den Wert aus dem CASE zu verwenden, wenn Test als eines ihrer Ergebnisse ohne zweimal die Select-Anweisung auszuschreiben (da es lang und chaotisch sein könnte)? Zum Beispiel:

 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

Gibt es eine Möglichkeit ich das Ergebnis des ersten Laufs der SELECT-Anweisung (für den Test) als DANN-Wert als auch verwenden kann? Ich habe versucht, „AS max_value“ nach dem ersten SELECT verwenden, aber es gab mir einen SQL-Fehler.

Aktualisieren : Whoops, wie Tom H. darauf hingewiesen, ich vergaß die "IS NOT NULL" in meiner ursprünglichen Frage

.
War es hilfreich?

Lösung

Dieses Beispiel zeigt, wie Sie eine Reihe von Werten in einer Unterabfrage vorbereiten können, und sie in einem Fall, in dem äußeren SELECT verwenden.

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

Nicht sicher, ob das, was Sie nach, die Frage ist unklar (zum Beispiel Ihres 2 MAX () Abfragen erscheint exakte Kopien sein.)

Andere Tipps

Ist Ihre Aussage sogar laufen? Es ist kein boolean Ausdruck Ihrer CASE-Anweisung. Ist MySQL Standard für NULL-Wert zu überprüfen, ob Sie nicht ein boolean verwenden?

Ich denke, das ist wahrscheinlich das, was Sie suchen:

SELECT
     id,
     COALESCE(
     (
          SELECT
               MAX(value)
          FROM
               My_Table
          WHERE
               other_value = 1
     ), 0) AS max_value
FROM
     Other_Table
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top