Unterabfragen zusammenlegbar?

Hallo!

Ich habe eine Abfrage die mir dank zweier Unterabfragen (subselects) jeweils eine Spalte mit einem Array als Inhalt zurückgibt:

SELECT
 ARRAY(SELECT tab1.spalte1 FROM tab1 WHERE tab1.id=1),
 ARRAY(SELECT tab1.[B]spalte2[/B] FROM tab1 WHERE tab1.id=1)

Da die beiden Unterabfragen sich nur minimal unterscheiden, stellt sich mir die Frage ob man das nicht irgendwie zusammenlegen kann, ohne am Ergebnis etwas zu verändern.


Weiss jemand Rat?
Gruß!

Was genau erreichst du mit dem ARRAY() innerhalb deiner Anfrage? Und funktioniert folgendes nicht?

SELECT tab1.spalte1, tab1.spalte2 FROM tab1 ...

Das Resultat von deiner Lösung sind mehrere Datensätze, die ARRAY Lösung ergibt nur einen Datensatz. Das Resultat muss aber unbedingt identisch sein.

Der Unterschied zu

select tab1.spalte1, tab1.spalte2 from tab1 where id=1

ist mir auch nicht klar. Entweder fehlt da noch eine Bedingung, die spalte1 mit spalte2 verbindet, oder ich steh gewaltig auf dem Schlauch.

CU Uwe

Hallo,

die Spaltenbezeichnung ist etwas unglücklich merke ich gerade. Also die Spalte nach der gefiltert wird (tab1.id) ist KEIN Primärschlüssel und kommt mehrfach vor. Die Filterung mit WHERE liefert also jeweils mehrere Zeilen.

ads Lösung ergibt deswegen z.B.:
1, 88
2, 77
3, 99


Wohingegen die ARRAYS folgendes liefern:
{1,2,3}, {88,77,99}

Ja, vermutlich.

Der Fragesteller hat sowas wie:

test=# select * from tab1;
 id | sp1 | sp2
----+-----+-----
  1 |   1 |   1
  1 |   2 |   2
  1 |   3 |   3
  2 |   1 |   1
  2 |   2 |   2
  2 |   3 |   3
(6 rows)

und will sowas wie:

test=*# select array(select sp1 from tab1 where id=1), array(select sp2 from tab1 where id=1);
 ?column? | ?column?
----------+----------
 {1,2,3}  | {1,2,3}
(1 row)

und nicht sowas wie:

test=*# select sp1, sp2 from tab1 where id=1;
 sp1 | sp2
-----+-----
   1 |   1
   2 |   2
   3 |   3
(3 rows)

Leider führt sein Weg zu einem doppelten Scan der Tabelle und mir fällt auch grad nix besseres ein.

Andreas