quba
Goto Top

Zwei Tabellen zusammenführen und Bezüge zueinander herstellen

Hallo zusammen,

ich habe gerade Probleme mit einer Aktualisierungsabfrage.
Ist etwas komplizierter aber ich versuche es mal zu beschreiben:

Es sind zwei Tabellen (PC und Bildschirm) gegeben die in eine einzelne Tabelle (devices) überführt werden sollen.
Die Geräte in den zwei Ausgangstabellen habe eine eindeutige Inventarnummer (IID) sowie jeweils eine unique ID (PCID und BSID). Jeder Bildschirm ist einem PC zugordnet, d.h. die entsprechende PCID steht in einer Spalte in der Tabelle Bildschirm. Es kann auch sein, dass ein PC zwei Bildschirme hat, dann kommt eine PCID in zwei verschiedenen Einträge der Tabelle Bildschirm vor.

Die neue Tabelle devices beinhaltet wie gesagt beide Geräte. Ziel ist es die Bildschirme den PCs zuzuordnen (Spalte bs1 und bs2).
Ich habe jetzt schon eine Abfrage die mir zumindest anzeigt welche Inventarnummer (PC) welcher Inventarnummer (BS) zugeordnet ist.

Nur wie bekomme ich es hin, dass die neue unique ID der Tabelle devices von einem BS entsprechend in der Spalte bs1 oder bs2 des PCs steht?

Bsp:

Tabelle Bildschirm:
BSID | NAME | IID | PCID
1 | BS001 | 289 | 5
2 | BS002 | 290 | 5

Tabelle PC:
PCID | NAME | IID
5 | PC001 | 26

neue Tabelle devices:
ID | IID | NAME | BS1 | BS2
1 | 289 | BS001
2 | 290 | BS002
3 | 26 | PC001

Ziel ist dem PC001 in der Spalte BS1 und BS2 jeweils die ID der BS einzufügen.
Also quasi:

neue Tabelle devices:
ID | IID | NAME | BS1 | BS2
1 | 289 | BS001
2 | 290 | BS002
3 | 26 | PC001 | 1 | 2


Ich habe jetzt wie gesagt schon eine Abfrage die die Zuordnung der Inventarnummern zueinander hat, denn dies ist in der Zieltabelle ja mein einzigster Bezug zueinander.

IID-PC | IID-BS
26 | 289
26 | 290

Nur wie weitermachen???

Klingt ein wenig kompliziert. Und fragt nicht wieso ich aus zwei Tabellen eine machen will, es ist einfach so vorgegeben und gewollt Smile

Vielen Dank schonmal für Hinweise oder Tipps.
Grüße
quba

Content-Key: 160574

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

Printed on: April 23, 2024 at 06:04 o'clock

Member: StefanKittel
StefanKittel Feb 11, 2011 at 07:36:57 (UTC)
Goto Top
Moin,

wenn ich das richtig sehe ich Dein Problem eigentlich nur der 2. Bildschirm.
Sonst machst Du eine normale Abfrage mit Bezug und erhällst eine Liste mit allen Feldern, aber pro PC und BS Kombination einen Eintrag.
Also bei einem PC mit zwei BS auch 2 Einträge.

Mit einer Abfrage würde das nur gehen wenn Du die 2. BS in eine 3. Tabelle ausgliederst und auch in der Abfrage hinzufügst.
Sonst nur per VBA (ist aber nicht so kompliziert).

Stefan
Member: quba
quba Feb 12, 2011 at 08:31:59 (UTC)
Goto Top
Moin,

danke erstmal für die superschnelle Reaktion gestern!

Irgendwie ist mir das ja klar wie Du das meinst, aber ich glaube ich stehe auf dem Schlauch...
Hättest Du mir vllt. ein Code Beispiel wie Du das lösen würdest?

Meine Hilfstabelle habe ich ja schon mit PCIID und BSIID. Nur benötige ich dann noch die neue BSid um diese dem PC mit der PCIID unter bs1 bzw bs2 hinzuzufügen....

Danke für Deine Hilfe

quba
Member: Biber
Biber Feb 12, 2011 at 20:26:00 (UTC)
Goto Top
Moin quba,

Rückfragen:
Du hast ein gewisses Überangebot an Primarykey-Kandidaten.
In der "alten" Tabellen-Welt sind eigentlich die Inventarnummer IID wie auch die "BSID" und die "PCID" eindeutig.
Und jeweils zu zweit pro Tabelle.

In der "neuen" Welt mit einer Tabelle weniger führst du eine neue sinnfreie "ID" ein... wieder zusätzlich zur eindeutigen Invntarnummer.

Und die Bildschirme, die bisher verknüpft sind über die alte "PCID" mit einem PC...
Diese "PCID" taucht im neuen Modell ja nicht mehr auf.

Also:
  • ist die Inventarnr IID jetzt der eindeutige PK für alle PCs und Bildschirme?
  • wenn ja, wozu dient denn die neue "ID"???
  • wenn nein - in welchen Fällen ist die Eindeutigkeit verletzt?

Grüße
Biber
Member: quba
quba Feb 13, 2011 at 21:07:15 (UTC)
Goto Top
Grüß Dich Biber,

richtig, die IID gibt es immer nur einmal, jedoch kann es sein, dass einige Geräte aus der Historie keine Inventarnummer besitzen.
Aus diesem Grund war auch bisher die Verbindung über die PCID und BSID hergestellt.

Daher benötige ich auch weiterhin eine neue ID

Die IID ist zwar auch eindeutig jedoch in der neuen Tabelle quasi "nur" als Datenfeld zu behandeln.

Was meinst Du mit "Eindeutigkeit verletzt" ?

Danke und Grüße
quba
Member: Biber
Biber Feb 13, 2011 at 21:55:19 (UTC)
Goto Top
Moin quba,

mit "Eindeutigkeit verletzt" meinte ich genau den Fall, ob denn in dieser Datensammlung auch Geräte OHNE Inventarnur erfasst sind.
[ Ist ja die Frage, was denn nun das Ziel dieser Tabllen sein soll - bei einer "nachträglichen Erfassung" kann ja gelten:
"Ich erfasse nur Geräte mit Inventarnummer und in dieser Liste auch keine, die noch keine Inventarnummer haben."]

Kurz angemerkt - meine Meinung zu dem Thema ist:
Wenn ihr euch für den Weg einer Datenbank-Erfassung entschieden habt, dann müssen die Daten konsistent sein.
Bzw. alle Ausnahmen/Altlasten/Sonderfälle draussen bleiben.

Wenn der Schwerpunkt nicht die Konsistenz ist, sondern "der Überblick".... dann nehmt Excel oder Vergleichbares.

Deinem Datenmodell traue ich schon aufgrund der mehrfachen Unique-Keys je Tabelle (die aber manchmal auch leer sein dürfen) keine 10cm weit.

Beispiel - Mit der folgenden Abrage aus obigen Beispieltabellen könntest du deine neue "devices".Tabelle initial füllen:
SELECT  PC.PCId as OldPcOrBSID, PC.name, PC.IID, min( Bildschirm.BSid) as BS1,
           Iif(max( Bildschirm.BSID)>min(Bildschirm.BSID), max(Bildschirm.BSid), NULL ) as BS2
FROM PC left JOIN Bildschirm ON PC.PCID = Bildschirm.PCID
group by PC.PCID, PC.name, PC.IID
UNION select B.BSID, B.name, B.IID,  null, null from Bildschirm b;
Diese Abfrage (hier nur als reines SELECT, also gefahrlos ausführbar) liefert alle Felder für die neue "devices",
ausgenommen die neue Phantasie-ID (die ja vermutlich wieder so eine tolle "Autowert"-Klamotte sein soll).
Die wird aber ja ohnehin automatisch vergeben.

Zusätzlich kommt in dieser Abfrage noch die alte "PCID/BSID" mit... an der hängt ja eigentlich die Zuordnung von BS1/BS2 zu PC(s).

Problem--> genau diese alte -nennen wir es scherzhaft "Fremdschlüsselbeziehung" ist in der neuen Tabellenstruktur nicht mehr da.
Und die neue "eindeutige ID" ist ja wirklich absolut wertlos - dadurch sind zwar alle Datensätze "verschieden",
aber ob die "inhaltlich ungleich" sind, das kann diese ID nicht zusichern.

Ich würde Excel nehmen für solche Daten - die interessieren doch auch nicht 5000 Anwender, die da zeitgleich drauf aktualisieren.
Sondern einen verträumten Admin, der zweimal im Monat da einen Update durchführt.

Grüße
Biber
Member: quba
quba Feb 14, 2011 at 07:19:48 (UTC)
Goto Top
Moin Biber,

danke für deine Erklärung/Meinung und Hilfe zu dem Thema.

Ich muss Dir schon recht geben und evtl. das ganze wirklich nochmal überdenken face-smile

Wollte irgendwie einen schnellen unkomplizierten Weg wählen, der mir aber im nach hinein doch ein wenig zu umständlich erscheint.

Danke erstmal für das Beispiel, einen schönen Tag und Grüße
quba

Edit: Mittlerweile habe ich es mit insgesamt 4 Hilfstabellen geschafft mein gewünschtes Ergebnis zu erreichen.