Ergebnis 1 bis 9 von 9

Thema: multicols bigint[] aus function zu einem bigint[] zusammenführen

  1. #1
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard multicols bigint[] aus function zu einem bigint[] zusammenführen

    Hi, ich habe gerade einen Knoten im Hirn und brauche eure Hilfe.

    ich habe eine tabelle IDS mit eindeutiger id(bigint)

    id value
    1 a
    2 b
    3 c

    nun habe ich eine function die verschiedene (für das problem unerhebliche) beziehungen herstellt und mir die ids in arrays ausspuckt.

    select function(x) from tabelle y;

    {1}
    {2,3}

    nun möchte ich alle einträge aus der tabelle IDS selektieren deren id in den arrays stecken.

    Bsp.

    select id from IDS where id = ANY(select function(x) from tabelle y)

    sagt mir >> more than one row returned by a subquery used as an expression.

    also möchte ich das ergebnis von select function(x) from tabelle y zusammenführen so das

    {1}
    {2,3}

    zu

    {1,2,3} oder von mir aus auch {2,3,1} us.w. wird. jedenfalls das aus den multicols der function eine col wird mit allen werten die es enthält. pgsql kann dazu eingesetzt werden. DB ist Postgres 8.3

    Bitte nicht FOR LOOP. das würde die Sache endlos langsam machen.

    Liebe Grüße

    Sigh

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Sigh Beitrag anzeigen
    Hi, ich habe gerade einen Knoten im Hirn und brauche eure Hilfe.

    ich habe eine tabelle IDS mit eindeutiger id(bigint)

    id value
    1 a
    2 b
    3 c

    nun habe ich eine function die verschiedene (für das problem unerhebliche) beziehungen herstellt und mir die ids in arrays ausspuckt.

    select function(x) from tabelle y;

    {1}
    {2,3}

    nun möchte ich alle einträge aus der tabelle IDS selektieren deren id in den arrays stecken.

    Bsp.

    select id from IDS where id = ANY(select function(x) from tabelle y)

    sagt mir >> more than one row returned by a subquery used as an expression.

    also möchte ich das ergebnis von select function(x) from tabelle y zusammenführen so das

    {1}
    {2,3}

    zu

    {1,2,3} oder von mir aus auch {2,3,1} us.w. wird. jedenfalls das aus den multicols der function eine col wird mit allen werten die es enthält. pgsql kann dazu eingesetzt werden. DB ist Postgres 8.3

    Bitte nicht FOR LOOP. das würde die Sache endlos langsam machen.

    Liebe Grüße

    Sigh
    Du könntest mit array_to_string die Arrays in Strings zerlegen und dann wieder mit string_agg wieder die Strings zu einem einzelnen Array aggregieren.


    Oder auf Arrays verzichten.



    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    es gibt kein string_agg auf der 8.3 (

  4. #4
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    habe es auch schon so gehabt das die function(x) kein array zurückgibt sondern die ids

    select function(x) from tabelle y where x = 1;

    function
    1
    2

    aber das funktioniert dann nicht mit der ganzen tabelle

    function(x) from tabelle y where x IN(1,2);

    > set-valued function called in context that cannot accept a set

    deswegen der Umweg über das Array. Wenn das problem mit dem Set lösbar ist, will ich auch lieber ohne arrays.

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Sigh Beitrag anzeigen
    es gibt kein string_agg auf der 8.3 (
    Kann man sich bauen:

    PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: User-Defined Aggregates
    array_accum

    Man kann natürlich auch Updaten ...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    Updaten steht in den Sternen. Muss durch alle Test prozesse durch etc.. Will ja auch <br><br>wg. array_accum<br><br>select array_accum(array_to_string(function(x),',')) from table y;<br><br><table class="wysiwyg_dashes" width=""><tbody><tr class="wysiwyg_dashes_tr"><td class="wysiwyg_dashes_td">{1,"2,3"}<br></td></tr></tbody></table><br>setze ich das in die nächste ein<br><br>select id from IDS where id = ANY(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (select array_accum(array_to_string(function(x),',')) from table y) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br><br>kommt leider<br><br>&gt;ERROR:&nbsp; operator does not exist: bigint = text[]<br>&gt;HINT:&nbsp; No operator matches the given name and argument type(s). You might need to add explicit type casts.

  7. #7
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    auweia

    Updaten steht in den Sternen. Muss durch alle Test prozesse durch etc.. Will ja auch

    wg. array_accum

    select array_accum(array_to_string(function(x),',')) from table y;

    {1,"2,3"}

    setze ich das in die nächste ein

    select id from IDS where id = ANY( (select array_accum(array_to_string(function(x),',')) from table y) )

    kommt leider

    >> ERROR: operator does not exist: bigint = text[]
    >> HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.

  8. #8
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    mache ich es ohne array_to_string

    select array_accum(function(x)) from table y;

    kommt:

    >> ERROR: could not find array type for data type bigint[]

  9. #9
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    öhm mache ich sowas verrücktes wie

    select string_to_array(array_to_string(array_accum(array_ to_string(function(x),',')),','),',') from table y

    kommt tatsächlich

    {1,2,3} raus

    ^^

    mit schnell hat das dann aber auch nixmehr zu tun.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 28.03.2012, 10:35
  2. Werte zusammenführen.
    Von bitsecure im Forum SQL
    Antworten: 9
    Letzter Beitrag: 14.11.2011, 19:18
  3. 2 Tabellen zusammenführen
    Von blablub im Forum Allgemeines
    Antworten: 1
    Letzter Beitrag: 10.05.2010, 18:25
  4. Zwei Tabellen zusammenführen
    Von Starkilla im Forum SQL
    Antworten: 6
    Letzter Beitrag: 29.05.2008, 18:15
  5. Antworten: 4
    Letzter Beitrag: 08.02.2008, 18:18

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum