Array of Integer mit Strings decodieren

Probleme, Fragen die mit der Installation und Anwendung der PostGIS-Erweiterung zu tun haben.
Antworten
Schultze
Neuer Benutzer
Beiträge: 4
Registriert: Mo 9. Mär 2020, 21:42

Array of Integer mit Strings decodieren

Beitrag von Schultze »

Hallo liebe Gemeinde,

in den ALKIS-Tabellen befinden sich Arrays of Integer wie zum Beispiel:

entstehungsartoderklimasufewasserverhaeltnisse
integer[]
{1000}
{3000},{4000}
{1000}
usw.

und eine Tabelle:

wert.......................beschreibung
integer....................varchar

1000 ......................Blume
2000 .................. ...Stein
3000 ............ .........Ast
4000 .............. .......Wald

Wie erzeuge ich die Tabelle:

Klartext
varchar[]
{Blume}
{Ast},{Wald}
{Blume}

???

Danke für Eure Tipps!

akretschmer
Erfahrener Benutzer
Beiträge: 7733
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Array of Integer mit Strings decodieren

Beitrag von akretschmer »

ich glaube, du suchst sowas wie:

Code: Alles auswählen

test=*# select * from t1;
 wert | beschr 
------+--------
 1000 | blume
 2000 | stein
 3000 | ast
 4000 | wald
(4 rows)

test=*# select * from t2;
       info       
------------------
 {1000}
 {3000,4000}
 {1000,2000,3000}
(3 rows)

test=*# with x1 as (select t2.info, unnest(t2.info) as wert from t2) select info, string_agg(t1.beschr,', ') from x1 left join t1 on x1.wert=t1.wert group by x1.info;
       info       |    string_agg     
------------------+-------------------
 {3000,4000}      | ast, wald
 {1000}           | blume
 {1000,2000,3000} | blume, stein, ast
(3 rows)
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Schultze
Neuer Benutzer
Beiträge: 4
Registriert: Mo 9. Mär 2020, 21:42

Re: Array of Integer mit Strings decodieren

Beitrag von Schultze »

Vielen Dank für diese Anregung! Ich bastle aber noch an einer Lösung, bei der die Endtabelle die gleiche Struktur wie die array- Ausgangstabelle hat.
Der unnest - Befehl macht aus den Spalten der array - Elemente Zeile, so dass die Endtabelle eine andere Struktur erhält.
Mir schwebt da eine Lösung mit max(array_length()) und dann ein select im Loop von 1 bis max(array_length()) vor...

pogomips
Erfahrener Benutzer
Beiträge: 136
Registriert: Fr 18. Nov 2016, 09:55

Re: Array of Integer mit Strings decodieren

Beitrag von pogomips »

Ähh, Du hast aber schon die gesamte Antwort von akretschmer gelesen, so mit runterscrollen und so?

Was ist genau die Struktur der Ausgangstabelle und wie genau soll das Ergebnis aussehen?

Schultze
Neuer Benutzer
Beiträge: 4
Registriert: Mo 9. Mär 2020, 21:42

Re: Array of Integer mit Strings decodieren

Beitrag von Schultze »

Yeap.

Ich habe eine etwas größere Tabelle der Dimension: m:n mit dem Code ausprobiert und die Lösungstabelle hat die Dimension: unterschiedliche arrays:m...

Mein Ziel ist es eine Spalte als array of char mit den Klarnamen statt der Codeziffern in die sonst gleiche Tabelle zu basteln. Heute kam ein ziemlich dickes Buch zur SQL-Programmierung ins Haus geflattert und sollte ich es hinbekommen, poste ich hier die Lösung...

castorp
Erfahrener Benutzer
Beiträge: 1209
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Array of Integer mit Strings decodieren

Beitrag von castorp »

Besser wäre ein Buch zur Normalisierung gewesen... ;)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Schultze
Neuer Benutzer
Beiträge: 4
Registriert: Mo 9. Mär 2020, 21:42

Re: Array of Integer mit Strings decodieren

Beitrag von Schultze »

Das haben mir die vom ALKIS eingebrockt, und auch noch zwei Eigenschaften in einer Spalte... Die müssen besoffen gewesen sein.

pogomips
Erfahrener Benutzer
Beiträge: 136
Registriert: Fr 18. Nov 2016, 09:55

Re: Array of Integer mit Strings decodieren

Beitrag von pogomips »

ALKIS sind gern besoffen, so ist das nun mal.

Ich habe nicht verstanden, was Du an der erhaltenen Antwort vermisst. Für mich macht sie genau das, was Du forderst.
Codes durch passende Texte ersetzen. (Ob es nun in geschweiften Klammern steht oder nicht ist Zucker und kann verändert werden)

Antworten