Autor Beitrag
Biergeneral
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

WIN XP
Delphi 7 Ent., Delphi 2007 Ent., C/C++ (Eclipse)
BeitragVerfasst: So 30.11.08 01:25 
Hallo,

ich bin auf der Suche nach einer performanten Möglichkeit, 2 Tabellen zu in Oracle zu kombinieren. Dabei hab ich das Problem, dass ich aus Tabelle 2 Zeileninhalte in verschiedene Spalten kopieren muss:


Verwendet wird Oracle >= Version 9.
Als Anbindung zur Datenbank nutze ich ADO

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
{Tabelle1}
  ID, Wert1, Wert2, WertN
   0|   ABC|   ASD|   12N|
   1|   BCD|   ASE|   13N|

// Wert1 ist der Primärschlüssel, die ID ist ein Unique Feld
{Tabelle2}
  
  ID, Name, Wert
   0|  XX1|  AB0
   0|  XX2|  AB1
   1|  XX1|  123
   1|  XX2|  456

// ID entspricht der ID aus Tabelle1
{Zieltabelle Tabelle}
  ID, Wert1, Wert2, WertN, XX1, XX2
   0|   ABC|   ASD|   12N| AB0|  AB1
   1|   BCD|   ASE|   13N| 123|  456



Das ganze bewegt sich in einer Größenordnung von 20.000 Einträgen in Tabelle 1 und etwa 20-60 Attributen pro Eintrag in Tabelle2, wobei die genau Anzahl unterschiedlich sein kann.
Die Inhalte der Spalte "Name" sind mir vor dem Auslesen bekannt. Mein letzter Ansatz sah daher so aus:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
SELECT * FROM "Tabelle1" A JOIN
(SELECT DISTINCT "ID", V1 AS "XX1", V2 AS "XX2" FROM "Tabelle2",
(SELECT "WERT" AS V1,"ID" AS ID1 FROM "Tabelle2" WHERE "WERT"='XX1'),
(SELECT "WERT" AS V2,"ID" AS ID2 FROM "Tabelle2" WHERE "WERT"='XX2')
WHERE "ID"=ID1 AND ID1=ID2) B
ON A."ID" = B."ID"


Sprich, für jede Spalte die ich anhängen wollte, kam ein SubQuery dazu.. Das ist allerdings ziemlig langsam.

Mit meinen heldenhaften SQL-Kentnissen bin ich nu auch am Ende :-D
Daher: Gibt es noch einen Besseren weg, abgesehen davon, die beiden Tabellen separat auszulesen und programmintern zusammenzuführen?

Nächtliche Grüße vom Biergeneral
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: So 30.11.08 11:35 
{Tabelle2} wirst du per PIVOT-Umwandlung transformieren müssen. Wie dort die Syntax bei Oracle ist weis ich nicht.