movido
Goto Top

SQL - dynamische Anfüge-Abfrage in Tabelle

dynamisch generierte Anfüge-Abfrage gleicher Struktur -> insert into tabelle ohne duplikate

Hallo zusammen,

habe bereits diverse Foren zu meinem Thema ohne Erfolg durchklamüsert... face-sad

Es gibt eine bestehende leere Tabelle, die anhand einer SICH WIEDERHOLENDEN Anfüge-Abfrage ohne Duplikate eines Feldes gefüllt werden soll.

Beispiel:
- leere Zieltabelle A: Feld1 = Name; Feld2 = aktiviert
- Abfrage: wird aus vba generiert, indem aus unterschiedlichen und gefüllten Tabellen (B + C) unterschiedliche Feldinhalte gleicher Struktur in die Tabelle A eingefügt werden (einfach mit insert into)
- gefüllte Quelltabellen B+C: Feld1 = Name; Feld2 = aktiviert

Feld1 ist hier entscheidend -> dort soll "gruppiert werden", d.h. in der Zieltabelle soll durch den insert-into-Befehl KEINE Duplikate entstehen...

Ich kriegs nicht hin, das beschriebene Beispiel ohne Duplikate durchzuführen...

Ich hoffe, dies funktioniert ohne temporäre Tabelle/hoher Geschindigkeitsverlust :X

Gruß,
Stefan

Content-Key: 58309

Url: https://administrator.de/contentid/58309

Printed on: April 26, 2024 at 10:04 o'clock

Member: Biber
Biber May 08, 2007 at 17:46:04 (UTC)
Goto Top
Moin movido,

ist mir noch eine Spur zu abstrakt. Nachfrage:

  • die Abfrage fragt gleichzeitig oder alternativ oder nacheinander die Quelltabellen B und C ab?
  • ..."indem aus unterschiedlichen und gefüllten Tabellen (B + C) unterschiedliche Feldinhalte gleicher Struktur.." -->Du mir langsam erklären können?? Evtl. kleines Beispiel?
  • Wenn denn die Daten ohnehin offensichtlich in zwei Quelltabellen vorhanden und abrufbar sind, wozu überhaupt die Persistierung in einer redundanten dritten Tabelle?

Grüße
Biber
Member: movido
movido May 08, 2007 at 22:06:30 (UTC)
Goto Top
Hallo Biber!

Danke für die rasche Antwort!! face-smile

Antworten auf deine Fragen:

die Abfrage fragt gleichzeitig oder alternativ oder nacheinander die Quelltabellen B und C ab?

-> zur Zeit noch nacheinander: es ist sozusagen eine simple for-Schleife, welche so oft läuft, wie es Quelltabellen gibt und der bei jedem Durchlauf einen INSERT INTO-Befehl für die "durchlauf-entsprechende" Zieltabelle ausführt.

..."indem aus unterschiedlichen und gefüllten Tabellen (B + C) unterschiedliche Feldinhalte gleicher Struktur.." -->Du mir langsam erklären können?? Evtl. kleines Beispiel?

-> Beispiel Quelltabelle B:
Name | Alter
Biber:D | 13
Stefan | 12


-> Beispiel Quelltabelle B:
Name | Alter
Heinrich | 70
Biber:D | 13

Ergebnis soll sein, so schnell wie möglich folgende leere Tabelle mit gleicher Struktur (Felder: Name, Alter), folgender Inhalt steht:

-> Beispiel Zieltabelle A auf Quelltabelle B+C:
Name | Alter
Biber:D | 13
Stefan | 12
Heinrich | 70
... wobei die Reihenfolge der Datensätze in Zieltabelle A keine Rolle spielt.

Hat was vom GROUP BY-Befehl, aber mit dem gehts nich oder ich kriegs nich hin oder ich hab mich dann, als ich ihn richtig eingesetzt habe, vertippt... :X

Wenn denn die Daten ohnehin offensichtlich in zwei Quelltabellen vorhanden und abrufbar sind, wozu überhaupt die Persistierung in einer redundanten dritten Tabelle?

-> damit nich dauernd für jede Aktion die Tabellen ausgelesen werden müssen (liegen im Netz)

Danke schonmal für Deine Hilfe! face-smile

Gruß,
Stefan
Member: Biber
Biber May 09, 2007 at 05:55:52 (UTC)
Goto Top
Moin movido,

wenn denn der Sachverhalt so ist wie geschildert, dann wäre doch (verbal) immer die Abfrageformulierung:
"Hole mir aus der Quell-Tabelle alle Satzkombinationen "Name" und "Alter", die noch nicht in der Zieltabelle vorhanden sind und füge sie in die Zieltabelle ein."

Oder in (ungetestetem) Pseudo-SQL sinngemäß:
 SELECT Name, Alter from Quelltabelle
WHERE Name, Alter NOT IN (Select Name, Alter from Zieltabelle);

Und ggf. noch ein "INSERT INTO Zieltabelle" drumherum.

Oder hab ich noch etwas übersehen?

Gruss
Biber
Member: movido
movido May 09, 2007 at 08:32:41 (UTC)
Goto Top
Wooohoooo.....!!!!!! Mit ein wenig rumpfeilen hats funktioniert..... "NOT IN" => best face-smile)))
Hab vorher den gleichen Syntax mit NOT EXISTS statt NOT IN benutzt...... :XXXXXX

INSERT INTO Zieltabelle ( Name )
SELECT Name FROM Quelltabelle
WHERE Name NOT IN (SELECT Name FROM Zieltabelle)
AND Name <> '';

-> Muchos Gracias Biber !!!!!!

Gruß,
movido
Member: Biber
Biber May 09, 2007 at 09:50:07 (UTC)
Goto Top
-> Muchos Gracias
De nada, movido, da nich' für...

Ich mach den Beitrag dann mal dicht mit grünem Haken.

Grüße
Biber