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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 160574
Url: https://administrator.de/contentid/160574
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
6 Kommentare
Neuester Kommentar
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
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
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:
Grüße
Biber
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
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:
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
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;
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