Mehrere Rückgabewerte in einem CASE-Statement? Alternativen?

Mehrere Rückgabewerte in einem CASE-Statement? Alternativen?

am 28.07.2007 11:36:10 von busnet

Hi,

Ich hoffe, jemand hat eine Idee, wie ich das optimieren kann.
Ich habe eine eher complexe Abfrage mit einer Fallunterscheidung:

/-----
SELECT CASE
WHEN complexcalculations1 THEN returnvalue1
WHEN complexcalculations2 THEN returnvalue2
ELSE returnvalue3
END AS returnname
\-----

Das funtioniert auch hervorragend.
Nun möchte ich aber in jedem Entscheidungsfall 2 verschiedene Zeilen
zurückgeben, ich habe also folgendes probiert:

/-----
SELECT CASE
WHEN complexcalculations1 THEN returnvalue1a AS returnname_a,
returnvalue1b AS returnname_b
WHEN complexcalculations2 THEN returnvalue2a AS returnname_a,
returnvalue2b AS returnname_b
ELSE returnvalue3a AS returnname_a, returnvalue3b AS returnname_b
END
\-----

Das tut aber leider nicht. Ich könnte natürlich das Ergebnis über
folgendes Konstrukt erziehelen:

/-----
SELECT CASE
WHEN complexcalculations1 THEN returnvalue1a
WHEN complexcalculations2 THEN returnvalue2a
ELSE returnvalue3a
END AS returnname_a
CASE
WHEN complexcalculations1 THEN returnvalue1b
WHEN complexcalculations2 THEN returnvalue2b
ELSE returnvalue3b
END AS returnname_b
\-----

Aber eigentlich ist es ja unnötig, die complexcalculations zweimal für
die gleichen Werte auszuführen.
Hat jemand eine Idee?

Danke!

Re: Mehrere Rückgabewertein einemCASE-Statement? Alternativen?

am 28.07.2007 16:08:27 von Harald Fuchs

In article <1185615370.631430.40510@d55g2000hsg.googlegroups.com>,
busnet writes:

> /-----
> SELECT CASE
> WHEN complexcalculations1 THEN returnvalue1a
> WHEN complexcalculations2 THEN returnvalue2a
> ELSE returnvalue3a
> END AS returnname_a
> CASE
> WHEN complexcalculations1 THEN returnvalue1b
> WHEN complexcalculations2 THEN returnvalue2b
> ELSE returnvalue3b
> END AS returnname_b
> \-----

> Aber eigentlich ist es ja unnötig, die complexcalculations zweimal für
> die gleichen Werte auszuführen.

Wenn MySQL das nicht von sich aus optimiert, könnte man ihm vielleicht
einen Hinweis geben:

SELECT
CASE
WHEN cc1 THEN returnvalue1a
WHEN cc2 THEN returnvalue2a
ELSE returnvalue3a
END AS returnname_a,
CASE
WHEN cc1 THEN returnvalue1b
WHEN cc2 THEN returnvalue2b
ELSE returnvalue3b
END AS returnname_b
FROM (
SELECT complexcalculations1 AS cc1, complexcalculations2 AS cc2, ...
FROM ...
) AS dummy

Re: Mehrere Rückgabewerte in einem CASE-Statement? Alternativen?

am 29.07.2007 16:32:38 von busnet

Danke. Werd das dann notfalls so machen müssen.
Was haltet ihr davon, die einzelnen Rückgabewerte als String (getrennt
durch z.B. ';') aneinanderzuhängen und dann als einen Wert zurückgeben
zu lassen?
Ist das sehr unsauber? ;-)

...gerrit