2017-06-16 1 views
0

Ich habe einige SQL, das einige hart codierte Werte hat, die ich mit Werten aus einer DatenbankspalteUNNEST eine Spalte

with pre as (
with a(k, v) as (select id, my_column from mytable), 
col(s, n) as (select * from unnest(array['Title', 'First', 'Middle', 'Last']) with ordinality c (s, n)) 

Ich versuche, die UNNEST sql mit so etwas zu ersetzen versuchen zu ersetzen:

select unnest(string_to_array(my_column, ':')) as elements from mytable 

mycolumn Inhalte in der Länge variieren, aber ein Beispiel könnte title = aaa sein: first = bbb: Mitte = ccc: last = ddd

Dank

+0

ich mit Beispiel beantwortet, wie aus der Tabelle wählen statt „hartcodiert Werte". Bitte erläutern Sie die Frage - Ich würde nicht verstehen, was Sie fragen, wenn wir nicht vorher chatten –

Antwort

0

Basis meine Antwort on your previous post. Hier ist ein Beispiel dafür, wie Sie unnest(string_to_array(my_column, ':')) mit benannten Spalten auf Ordinalität beitreten können:

t=# with a as (select id,k,v from my_table, unnest(string_to_array(my_column, ':')) with ordinality as t(k,v)) 
, col(s, n) as (select * from unnest(array['Title', 'First', 'Middle', 'Last']) with ordinality c (s, n)) 
select * from a join col on n=v; 
id |  k  | v | s | n 
----+------------+---+--------+--- 
    1 | title=aaa | 1 | Title | 1 
    1 | first=bbb | 2 | First | 2 
    1 | middle=ccc | 3 | Middle | 3 
    1 | last=ddd | 4 | Last | 4 
(4 rows) 

Natürlich müssen Sie verbinden anders (basierend auf dem früheren Post). Aber wenn der unklare Teil war, wie Sie aus der Tabelle wählen, anstatt aus Werten auszuwählen, sollte das obige Beispiel helfen.

Update

Put-Werte Tabelle:

t=# create table keys(t text); 
CREATE TABLE 
Time: 91.908 ms 
t=# insert into keys select unnest(array['Title', 'First', 'Middle', 'Last']); 
INSERT 0 4 
Time: 11.552 ms 
t=# select * from keys ; 
    t 
-------- 
Title 
First 
Middle 
Last 
(4 rows) 

und melden Sie sich jetzt gegen Tasten Tabelle:

t=# with a as (select id,k,v from my_table, unnest(string_to_array(my_column, ':')) with ordinality as t(k,v)) 
select * from a join keys on split_part(k,'=',1) = lower(t); 
id |  k  | v | t 
----+------------+---+-------- 
    1 | first=bbb | 2 | First 
    1 | last=ddd | 4 | Last 
    1 | middle=ccc | 3 | Middle 
    1 | title=aaa | 1 | Title 
(4 rows) 
+0

Es ist dieser Teil Ich habe ein Problem mit Auswahl * von unnest (Array ['Titel', 'First', 'Middle', 'Last'] wie ich nicht weiß, was das sein wird, also möchte ich den Wert aus der Spalte bekommen und nicht hart code sie – user8159298

+0

@ user8159298 aktualisiert die Antwort –

+0

Ich bin immer noch verwirrt! Wenn ich sage, wählen Sie my_column aus my_table, könnte der Inhalt sein, etwas, zum Beispiel my_column ---------- first = aaa: last = bbb: Mitte = ccc: Flasche = ddd: table = ddd In der Tabelle erstellen, ich brauche die Werte aus Die my_column, ich kann sie nicht hart codieren, da ich nicht weiß, was sie sein wird.Ich versuche meine_Spalte zu nnnesteln: und dann teile sie mit = und benutze den ersten Teil vor dem = als th Der Name der Tabellenspalte. Also ich versuche, so etwas zu tun, aber ich weiß nicht die richtige sql wählen unnest (string_to_array (my_column, ':')) als my_new_column von my_table, dann split_part von '=' – user8159298

Verwandte Themen