Oracle-SQL Teile von Tabellen kopieren
Markus
- datenbank
0 Hans
Hallo!
Für ein History-Feature muss ich eine neue Tabelle erstellen, in die ich auch aktuelle Daten hineinkopieren muss. Das wäre an und für sich kein Problem. Nur ist die neue Tabelle so aufgebaut dass ich mehrere Quell-Tabellen dafür benötige.
Zur Erklärung die Quelltabellen bezeichne ich als Q1 und Q2
Die zu erstellende Tabelle sieht so aus.
Interal_ID - soll mit einer Sequence eingefügt werden.
FREMD_ID_1 - Inhalt soll aus Tabelle Q1 kopiert werden.
FREMD_ID_2 - Inhalt soll aus Tabelle Q1 kopiert werden.
TITLE - soll aus Q2 kommen
ORT - soll aus Q2 kommen
Zur weiteren Erläuterung: In der jetzigen Version ist
Q1.FREMD_ID_2 in Q2 ein Foreign Key
I.E.
Tabelle Q1: Tabelle Q2:
FREMD_ID_2 ---> REF_FREMD_ID_2 TITLE ORT
1 1 bla bla
D.h. Die Abfrage müsste irgendwie so aussehen:
insert into NEUE_TABELLE (INTERNAL_ID,FREMD_ID_1,FREMD_ID_2,
TITLE,ORT)
values
(
SEQUENCE_ID.nextval,
select FREMD_ID_1 from Q1,
select FREMD_ID_2 from Q1,
select TITLE from Q2 where Q1.FREMD_ID_2 = Q2.REF_FREMD_ID_2,
select ORT from Q2 where Q1.FREMD_ID_2 = Q2.REF_FREMD_ID_2)
Kann das so in der RIchtung funktionieren?
mfg, Markus
Hi !
Interal_ID - soll mit einer Sequence eingefügt werden.
FREMD_ID_1 - Inhalt soll aus Tabelle Q1 kopiert werden.
FREMD_ID_2 - Inhalt soll aus Tabelle Q1 kopiert werden.
TITLE - soll aus Q2 kommen
ORT - soll aus Q2 kommenZur weiteren Erläuterung: In der jetzigen Version ist
Q1.FREMD_ID_2 in Q2 ein Foreign KeyI.E.
Tabelle Q1: Tabelle Q2:
FREMD_ID_2 ---> REF_FREMD_ID_2 TITLE ORT
1 1 bla bla
Na, dann hast Du doch schon alles.
insert into neue_tabelle (internal_id, fremd_id_1, fremd_id_2, title, ort)
select sequenz_id.nextval, q1.fremd_id_1, q1.fremd_id_2, q2.title, q2.ort
from tabelle_q1 q1, tabelle_q2 q2
where q1.fremd_id_2=q2.ref_fremd_id_2
and q1.fremd_id in (select fremd_id_1
from tabelle_q1
minus
select fremd_id_1 from neue_tabelle)
;
Über die where-Beziehung greifst Du nur auf die Datensätze in Tabelle Q2 zu, die sich über den foreign-key in Tabelle Q1 befinden. Dazu wird bei dem and-Teil sichergestellt, daß Du nicht immer die gleichen Datensätze in die neue_tabelle schreibst. Mit einem Index auf die fremd_id_1 kannst Du die Geschwindigkeit noch verbessern.
Gruß
Hans