Abfrage mit Beziehungen: C#.Net und MS Access 2000

Nukleo

Mitglied
Hi,

ich arbeite gerade an meinem ersten Programm bei dem Datenbankprogrammierung einen Großteil der Arbeit ausmacht.

Ich habe bereits verschiedene Anfragen in C# um gesetzt und benutze dabei eine OleDbConnection. Jetzt hab ich aber folgendes Problem. Angenommen es existieren folgende Tabellen


Tabelle 1 Tabelle2
GebäudeID || VerantwortlicherID EtageID || VerantwortlicherID
======================= ======================
G1 || P1 E1 || P3
G2 || P2 E2 || P4


Tabelle3
PersonName || ID
====================
Peter || P1
Uschi || P2
Bertram || P3
Aljoscha || P4

Ich möchte jetzt z.B. die ID des Objektes erfahren für das eine best. Person, z.B. Peter, verantwortlich ist. Ich möchte dabei nicht jede Einzelne Tabelle für sich untersuchen. Die Zahl der Objekte Tabellen, hier nur Gebäude und Etagen, könnten höher sein. In Access gibt es doch diese Beziehungen die man knüpfen kann. Ich habe bereits solche Beziehungen Angelegt zwischen der ID in Tabelle3 und der VerantwortlicherID in Tabelle1 und Tabelle2.

Meine Frage: Wie Formuliere ich eine SQL Abfrage die mir ID des Objektes zurück liefert für die Peter verantwortlich ist.

Die ID von Peter steht in Tabelle3 und die ObjektID entweder in Tabelle1 oder Tabelle2.

Ich hoffe ich hab mich klar ausgedrückt und ihr könnt mir schnell helfen
Mit besten Grüßen
Nukleo
 
Mist, da die Tabellen ein wenig verhunzt sind, hier nochmal

Tabelle 1
GebäudeID || VerantwortlicherID
=======================
G1 ............|| P1
G2 ............|| P2

Tabelle2
EtageID || VerantwortlicherID
======================
E1........ || P3
E2........ || P4
 
Hi, versuchs doch mal damit:

SELECT GebaeudeID ObjectID FROM Tabelle1 WHERE VerantwortlicherID = (SELECT ID FROM PersonName WHERE name = 'Peter')
UNION
SELECT EtageID ObjectID FROM Tabelle1 WHERE VerantwortlicherID = (SELECT ID FROM PersonName WHERE name = 'Peter')

Dafür ist vorausgesetzt, dass dein DBMS SubSelects unterstützt. Wenn nicht änder das SubSlect in einen JOIN um, wie in dem >Beispiel<
 
ich habs noch nicht ausprobiert, aber ich hab gleich so mal zwei weitere Fragen.

1. Wieso schreibst Du da was von ObjectID? Ist doch gar nicht Name einer Spalte
2. Ich seh in der Anfrage einen Bezug auf Tabelle1 aber keinen Bezug auf Tabelle2
 
Oh, das kommt vom Copy & Paste
Es soll natürlich

SELECT GebaeudeID ObjectID FROM Tabelle1 WHERE VerantwortlicherID = (SELECT ID FROM PersonName WHERE name = 'Peter')
UNION
SELECT EtageID ObjectID FROM Tabelle2 WHERE VerantwortlicherID = (SELECT ID FROM PersonName WHERE name = 'Peter')

heißen.
Und ObjectID ist nur ein Aliasname. Den kannst weg lassen, dann wird als Feldname für dieses Select immer GebäudeID angezeigt, egal ob es für die Person ein Gebäude gibt oder nicht. Ich wollte es Damit nur allgemienre halten, das musst du ja nicht machen
 

Neue Beiträge

Zurück