Hallo Gruppe,
ich brauche ein :
SELECT IF(2>1, (SELECT a, b FROM table1 WHERE id = 1), (SELECT c, d FROM table2 WHERE id = 2));
Leider beglückt mich MySQL dann mit "#1241 - Operand sollte 1 Spalte(n) enthalten". Wie kann ich meinen Wunsch oben realisieren?
Mit freundlichen Grüßen / Kind regards Ronny Seffner -- Ronny Seffner | Alter Viehweg 1 | 01665 Klipphausen www.seffner.de | ronny@seffner.de | +49 35245 72950 7EA62E22D9CC4F0B74DCBCEA864623A568694DB8
Zum einen verstehe ich nicht ganz was genau du erreichen willst; eine textliche Beschreibung wäre da hilfreich (vollst. Minimalbeispiel).
Habe ich nie mit IF oder CASE WHEN genutzt, aber die Syntax sieht bei Beispielen dann doch anders aus:
http://stackoverflow.com/questions/5951157/if-in-select-statement-choose-out...
On 15.02.2017 11:14, Ronny Seffner wrote:
ich brauche ein :
SELECT IF(2>1, (SELECT a, b FROM table1 WHERE id = 1), (SELECT c, d FROM table2 WHERE id = 2));
Leider beglückt mich MySQL dann mit "#1241 - Operand sollte 1 Spalte(n) enthalten". Wie kann ich meinen Wunsch oben realisieren?
Hallo und Danke für Deine Antwort.
Zum einen verstehe ich nicht ganz was genau du erreichen willst; eine textliche Beschreibung wäre da hilfreich (vollst. Minimalbeispiel).
Ich suche die korrekte MySQL-Syntax um ein WENN-DANN-SONST Konstrukt zu bilden, welches in den Fällen DANN und SONST unterschiedliche SELECTs mit mehrspaltigem Ergebnis fahren kann.
Ich habe Folgendes hier im postfix funktionieren, das Ergebnis ist immer einspaltig:
query = SELECT IF ((SELECT COUNT(*) FROM mail_virtual WHERE email = '%s') > 0, (SELECT policy_greylist FROM mail_virtual WHERE email = '%s' LIMIT 1), (SELECT IF ((SELECT COUNT(*) FROM mail_virtual WHERE iscatchall = 1 AND email LIKE CONCAT('%%@','%d')) > 0, (SELECT policy_greylist FROM mail_virtual WHERE iscatchall = 1 AND email LIKE CONCAT('%%@','%d') LIMIT 1), 'policy_greylist')))
Ich brauche das auch für Amavis, dort interessieren mich aber mehrere Spalten im Resultat.
Habe ich nie mit IF oder CASE WHEN genutzt, aber die Syntax sieht bei Beispielen dann doch anders aus:
http://stackoverflow.com/questions/5951157/if-in-select-statement- choose-output-value-based-on-column-values
Ich bin inzwischen ziemlich sicher, dass die Ergebnisse eines IF nur einspaltig sein dürfen. Ich glaube aber auch, dass MySQL mächtig genug sein sollte, meinen Wunsch umsetzbar zu machen - nur fehlt mir die Idee wie.
Mit freundlichen Grüßen / Kind regards Ronny Seffner -- Ronny Seffner | Alter Viehweg 1 | 01665 Klipphausen www.seffner.de | ronny@seffner.de | +49 35245 72950 7EA62E22D9CC4F0B74DCBCEA864623A568694DB8
Ronny Seffner ronny@seffner.de (Mi 15 Feb 2017 11:14:14 CET):
Hallo Gruppe,
ich brauche ein :
SELECT IF(2>1, (SELECT a, b FROM table1 WHERE id = 1), (SELECT c, d FROM table2 WHERE id = 2));
Leider beglückt mich MySQL dann mit "#1241 - Operand sollte 1 Spalte(n) enthalten". Wie kann ich meinen Wunsch oben realisieren?
IF(e1, e2, e3)
e2 und e3 dürfen nur einen Wert zurückliefern. Lt. Doku könnte
CASE WHEN … THEN … ELSE …
funktionieren. Bei mir aber gerade nicht (mysql 5.5 kann das vielleicht nicht).
Aber und überhaupt bin ich weit davon entfernt, mich mit SQL auzukennen.
Vermutlich geht das mit Postgres, das werden wir sicher auch gleich erfahren :)
Hallo Heiko,
IF(e1, e2, e3)
e2 und e3 dürfen nur einen Wert zurückliefern.
Ich war auch gerade über den Punkt, das zu akzeptieren.
Lt. Doku könnte
CASE WHEN … THEN … ELSE …
funktionieren. Bei mir aber gerade nicht (mysql 5.5 kann das vielleicht nicht).
Hier auch ein MySQL 5.5 und erfolglose Versuche mit CASE etwas zu bauen.
Vermutlich geht das mit Postgres, das werden wir sicher auch gleich erfahren :)
Sicher geht das dort, ich kann nur jetzt nicht mal so eben das Backend austauschen.
Auch Dir bis hierher vielen Dank für Deine Zeit.
Mit freundlichen Grüßen / Kind regards Ronny Seffner -- Ronny Seffner | Alter Viehweg 1 | 01665 Klipphausen www.seffner.de | ronny@seffner.de | +49 35245 72950 7EA62E22D9CC4F0B74DCBCEA864623A568694DB8
Am 15.02.2017 um 11:35 schrieb Heiko Schlittermann:
Vermutlich geht das mit Postgres, das werden wir sicher auch gleich erfahren :)
Klar ;-)
test=*# select * from ronny ; id | a | b | c | d ----+----+----+----+---- 1 | 1 | 2 | 3 | 4 2 | 11 | 12 | 13 | 14 (2 Zeilen)
test=*# select foo.* from (select case when 2 > 1 then (select (a, b ) from ronny where id = 1) else (select (c ,d ) from ronny where id = 2) end) foo; row ------- (1,2) (1 Zeile)
test=*# select foo.* from (select case when 2 > 2 then (select (a, b) from ronny where id = 1) else (select (c ,d ) from ronny where id = 2) end) foo; row --------- (13,14) (1 Zeile)
test=*#
Mal so als Schnellschuß...
lug-dd@mailman.schlittermann.de