Sub select als Liste zurückgeben

Hallo,

....
in einer SELECT Abfrage brauche ich Daten von einer anderen Tabelle,
die ich als
(SELECT ) AS ...
abfragen möchte.
Die Beziehung zwischen beiden Tabellen ist 1:n, das heißt dass mein
Subselect auch mehrere Ergebniszeilen enthalten kann.

Gibt es eine Möglichkeit, bei mehreren Ergebniszeilen des
Subselects, alle Ergebnisse als Zeichenkette "2006-12-06,
2007-06-12, 2005-06-15" dem neuen Merkmal (startdate) zuzuordnen?

SELECT
c.id,
c.accno,
-- ...
( SELECT startdate FROM taxkeys tk
WHERE tk.chart_id =3D c.id AND c.taxkey_id =3D tk.taxkey_id
) AS startdate
FROM chart c
ORDER BY accno|;

Vielen Dank!
Schöne Grüße
Udo Spallek

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org
udono [ Do, 01 Februar 2007 14:52 ] [ ID #1615290 ]

Re: [pgsql-de-allgemein] Sub select als Liste zurück

Hallo,

udono <udono [at] gmx.net> wrote:
> Gibt es eine Möglichkeit, bei mehreren Ergebniszeilen des
> Subselects, alle Ergebnisse als Zeichenkette "2006-12-06,
> 2007-06-12, 2005-06-15" dem neuen Merkmal (startdate) zuzuordnen?

du könntest dir ein Aggregat bauen, was die Werte als Liste auflistet. =
Ich
hatte sowas glaube ich vor einiger Zeit mal gebastelt...

lg
Tobias


---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq
e.t.bussmann [ Do, 01 Februar 2007 14:58 ] [ ID #1615292 ]

Re: Su

am Thu, dem 01.02.2007, um 14:52:13 +0100 mailte udono folgendes:
> Hallo,
>
> ...
> in einer SELECT Abfrage brauche ich Daten von einer anderen Tabelle,
> die ich als
> (SELECT ) AS ...
> abfragen möchte.
> Die Beziehung zwischen beiden Tabellen ist 1:n, das heißt dass mein
> Subselect auch mehrere Ergebniszeilen enthalten kann.
>
> Gibt es eine Möglichkeit, bei mehreren Ergebniszeilen des
> Subselects, alle Ergebnisse als Zeichenkette "2006-12-06,
> 2007-06-12, 2005-06-15" dem neuen Merkmal (startdate) zuzuordnen?

Vermutlich suchst Du sowas wie folgt:

test=3D*# select * from foo;
b
------
foo1
foo2
foo3
(3 rows)

test=3D*# select array_to_string(ARRAY(select b from foo), ', ');
array_to_string
------------------
foo1, foo2, foo3
(1 row)

test=3D*#



Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match
andreas.kretschmer [ Do, 01 Februar 2007 15:10 ] [ ID #1615293 ]

Re: [pgsql-de-allgemein] Sub select als Liste zurück

> Hallo,
>
> ...
> in einer SELECT Abfrage brauche ich Daten von einer anderen
> Tabelle, die ich als (SELECT ) AS ...
> abfragen möchte.
> Die Beziehung zwischen beiden Tabellen ist 1:n, das heißt
> dass mein Subselect auch mehrere Ergebniszeilen enthalten kann.
>
> Gibt es eine Möglichkeit, bei mehreren Ergebniszeilen des
> Subselects, alle Ergebnisse als Zeichenkette "2006-12-06,
> 2007-06-12, 2005-06-15" dem neuen Merkmal (startdate) zuzuordnen?
>
> SELECT
> c.id,
> c.accno,
> -- ...
> ( SELECT startdate FROM taxkeys tk
> WHERE tk.chart_id =3D c.id AND c.taxkey_id =3D tk.taxkey_id
> ) AS startdate
> FROM chart c
> ORDER BY accno|;
>
> Vielen Dank!
> Schöne Grüße
> Udo Spallek
>

ich denke entweder ist dein rueckgabewert vom typ array also retur.: int,
varchar array[varchar]...
oder ein outer join mit mehreren ergebniszeilen


---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
rene hankel [ Do, 01 Februar 2007 15:12 ] [ ID #1615294 ]

Re: Re

am Thu, dem 01.02.2007, um 14:58:59 +0100 mailte Tobias Bußmann folgen=
des:
> Hallo,
>
> udono <udono [at] gmx.net> wrote:
> > Gibt es eine Möglichkeit, bei mehreren Ergebniszeilen des
> > Subselects, alle Ergebnisse als Zeichenkette "2006-12-06,
> > 2007-06-12, 2005-06-15" dem neuen Merkmal (startdate) zuzuordnen?
>
> du könntest dir ein Aggregat bauen, was die Werte als Liste auflistet=
.. Ich
> hatte sowas glaube ich vor einiger Zeit mal gebastelt...

.... es geht einfacher, siehe andere Mail von mir.


Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
andreas.kretschmer [ Do, 01 Februar 2007 15:15 ] [ ID #1615295 ]

Re: Re

am Thu, dem 01.02.2007, um 14:58:59 +0100 mailte Tobias Bußmann folgen=
des:
> Hallo,
>
> udono <udono [at] gmx.net> wrote:
> > Gibt es eine Möglichkeit, bei mehreren Ergebniszeilen des
> > Subselects, alle Ergebnisse als Zeichenkette "2006-12-06,
> > 2007-06-12, 2005-06-15" dem neuen Merkmal (startdate) zuzuordnen?
>
> du könntest dir ein Aggregat bauen, was die Werte als Liste auflistet=
.. Ich

Das würde bleistiftsweise so gehen:

CREATE FUNCTION comma_aggregate(text,text) RETURNS text AS '
SELECT CASE WHEN $1 <> '''' THEN $1 || '', '' || $2 ELSE $2 END;
' LANGUAGE sql IMMUTABLE STRICT;

CREATE AGGREGATE comma (basetype=3Dtext, sfunc=3Dcomma_aggregate, stype=3D=
text, initcond=3D'' );


(geklaut von http://www.zigo.dhs.org/postgresql/#comma_aggregate)


Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net

---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate
andreas.kretschmer [ Do, 01 Februar 2007 15:25 ] [ ID #1615296 ]

Re: [pgsql-de-allgemein] Re: [pgsql-de-allgemein] Sub select als Liste zurückgeben (SOLVED)

Hi Andreas, Rene, Tobias,
A. Kretschmer schrieb:
> am Thu, dem 01.02.2007, um 14:58:59 +0100 mailte Tobias Bußmann folg=
endes:
> Das würde bleistiftsweise so gehen:
>
> CREATE FUNCTION comma_aggregate(text,text) RETURNS text AS '
> SELECT CASE WHEN $1 <> '''' THEN $1 || '', '' || $2 ELSE $2 END;
> ' LANGUAGE sql IMMUTABLE STRICT;
>
> CREATE AGGREGATE comma (basetype=3Dtext, sfunc=3Dcomma_aggregate, stype=
=3Dtext, initcond=3D'' );
> (geklaut von http://www.zigo.dhs.org/postgresql/#comma_aggregate)

Mein sub-
(SELECT comma(startdate) FROM taxkeys tk )
funktioniert auf Anhieb. Bestens!

Vielen Dank für eure Hilfe.

Schöne Grüße
Udo Spallek

---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate
udono [ Do, 01 Februar 2007 16:20 ] [ ID #1615297 ]

Re: [pgsql-de-allgemein] Re: [pgsql-de-allgemein]

Hi Andreas,

A. Kretschmer <andreas.kretschmer [at] schollglas.com> wrote:
> ... es geht einfacher, siehe andere Mail von mir.

danke für den Tipp - gute Idee!
Mein Aggregat arbeitet ansich genauso, nur dass es die gesamte
Funktionalität nochmal kapselt und ich die array-to-string Funktion sel=
bst
geschrieben hab - ein Blick in die Funktionsliste lohnt sich wohl manchma=
l
;)

Gruß
Tobias


---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match
e.t.bussmann [ Do, 01 Februar 2007 19:16 ] [ ID #1615298 ]
Datenbanken » gmane.comp.db.postgresql.german » Sub select als Liste zurückgeben

Vorheriges Thema: == WöchentlicherPostgreSQL Newsletter - 4.Februar 2007
Nächstes Thema: pg_dump/pg_restore und LargeObjects