Gibt es eine Möglichkeit ich den Fall machen kann, wenn Test eines der Ergebnisse, anstatt sie zweimal ausgeführt wird?
-
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
.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