SQL temporären Typ erstellen

Wlan-Kabel

Lt. Junior Grade
Registriert
Juli 2008
Beiträge
297
Moinmoin,
folgendes: ich greife auf eine Datenbank zu (ausschließlich leserechte) und will jetzt folgendes erreichen:

Einer ID der "Haupttabelle" sind mehrere Werte in einer "Untertabelle" zugeordnet. Jetzt möchte ich, wenn ich beide joine aber nicht 2,4 oder 7 mal da die Infos der Haupttabelle stehen haben, nur weil in der Untertabelle halt 2,4 bzw. 7 einträge zu der ID sind, sondern ich möchte die Werte zur ID in der Untertabelle zusammenführen.

In Worten:
Code:
 CREATE TABLE haupttabelle (ID integer PRIMARY KEY, Name varchar2(64));
 CREATE TABLE untertabelle (ID integer references haupttabelle(ID), eigenschaft);
 /* Tabellen füllen */ 

 /*Meine Idee*/
 CREATE TYPE var_list IS TABLE OF varchar(256);
 SELECT name, cast(collect(eigenschaft) AS varlist) Eigenschaften
 FROM haupttabelle ha JOIN untertabelle un ON ha.ID = un.ID
 GROUP BY ha.ID;

(Obs so laufen würde weiß ich nicht, aber ich denke schon)
Mein Problem ist halt jetzt, dass ich halt nur Leserechte habe, also nicht mal eben nen neuen Typ erstellen kann, geht das irgendwie temporär? so á la: .. cast(collect(eigenschaft) AS (table of varchar(256))) ..
Oder hat einer womöglich noch ne gute Alternativlösung?

Gruß
Kabel
 
Mahlzeit,

So ganz verstanden, was du willst, habe ich leider nicht,
aber ich werfe einfach mal die Stichworte "Sub-Query" und "GROUP_CONCAT" in den Raum.

Gruß
 
collect(eigenschaft) ist quasi eine sub-query

über group_concat kann mans lösen, dass man das über die Gruppierung lösen kann, daran hatte ich gar nicht gedacht. Für Oracle SQL brauchte ich allerdings stattdessen wm_concat, aber der Ansatz war entscheidend, danke dafür.
hier nochmal meine Lösung:

Code:
SELECT name, (SELECT wm_concat(eigenschaft) FROM  untertabelle un WHERE un.ID = ha.ID)Eigenschaften
FROM haupttabelle ha;
/* geht natürlich auch über JOIN, GROUP BY und dann ohne Unterabfrage, aber bei längeren SELECTS kams da bei mir zu Schwierigkeiten, daher so*/
 
Zuletzt bearbeitet: (Präzisierung)
Zurück
Oben