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
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
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
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
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
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
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
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