Access-Abfrage kniffliges Problem...
Geizhals » Forum » Programmierung » Access-Abfrage kniffliges Problem... (5 Beiträge, 176 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Access-Abfrage kniffliges Problem...
09.02.2006, 10:38:47
Hi!

Ich habe ein kniffliges Problem mit eine Access-Abfrage.
Betroffen sind 3 Tabellen: tblContacts, tblOrganisation und der Zuordnungstabelle tzoOrganisationContacts. (Nennen wir sie tblC, tblO und tzoCO) Die tzoCO ist dafür da, um eine m:n-Relation zwischen Contacts und Organisation herstellen zu können: Leute können Mitglied mehrere Organisationen sein.

In alle Tabellen habe ich Adress-Informationen (Street, ZIP, City, CountryID). Ein Contact kann in Wien wohnen, der Org 'EU' (mit Adresse in Brussel) angehören und in ein Büro in Schwechat arbeiten. In tblC steht also 'Wien', in tblO 'Brussel' und in tzoCO 'Schwechat'.

Jetzt brauche ich eine Abfrage der mir (wenn es möglich ist) folgende Felder zurückliefert: ContactID, ContactName, ContactAddress, OrgName, tzoAddress.
Wenn jemand in mehrere Organisationen ist (jemand kann EU-Ambassador sein und OSZE-Funktionär), brauche ich etwas wie ContactID, ContactName, ContactAddress, OrgName, tzoAddress, OrgName, tzoAddress, also die zwei (oder mehr) zugeordnete Adressen der Organisationen _hintereinander_, in der gleiche Zeile.

Hat jemand ein Idee wie ich zu sowas komme? Oh ja, ich brauche _1_ Abfrage, da dieser Abfrage im Programm öfters wiederverwendet wird. Für genestete Subqueries und Unions habe ich keine Angst, solange Access2003 (leider... :-() mitspielt...

Danke im Voraus,
Ardjan


<stolz> Mein Sohn! </stolz>

   !!! VIRUSWARNUNG !!!
Antworten PM Übersicht Chronologisch
 
Melden nicht möglich
.
Re: Access-Abfrage kniffliges Problem...
11.02.2006, 12:08:30
Hi !

Ich bin zwar der ACCESS-Dau (siehe auch meine Frage hier im Forum, bei der Du mir evtl. helfen kannst), aber ich red' mal einfach goschert... ;-)

1.) Ich finde dein Datenmodell Suboptimal. Ich würde niemals die Adressinformation direkt an den Tabellen tzoCO,... anhängen, sondern würde mir eine Länder-Tabelle, eine Ort-Tabelle, eine Adressentabelle, ... anlegen - sonst schaffst nie die 3.NF (und die betrachte ich als absolut unverzichtbar)

2.) Ich habe mal was ähnliches woanders gebraucht (in einer anderen DB, nicht ACCESS).
Beispiel:
Tabelle1 mit "id, werte"-Spalte

  1  HUGO
  1  MÜLLER
  1  FRANZ
  2  OTTO

und wir wollen als Ergebnis

  1 HUGO,MÜLLER,FRANZ
  2 OTTO
</CODE

Das ließ sich wie folgt realisieren (PostgreSQL):
<code>
CREATE TEMPORARY TABLE TEMP_NAMEN AS
SELECT DISTINCT id,' ' FROM Tabelle1;

UPDATE temp_namen SET werte=temp_namen.werte || ',' || Tabelle1.werte
FROM Tabelle1
WHERE Tabelle1.id = temp_namen.id;

UPDATE temp_namen SET werte=SUBSTR(werte,3);


Das ist aber nicht ganz genau das, was du willst - denn wenn ich es richtig verstanden
habe, willst du ja, daß mehrere Spalten rauskommen sollen - wobei ich noch immer nicht glaube, daß man das nachher leicht programmatisch weiterverwenden kann und daher noch immer nicht glaube, daß das eine gute Idee ist (natürlich kannst du gerade den einen Fall haben, wo es Sinn macht ;-) )

In so einem Fall würde ich in PostgreSQL oder Oracle auf einen INSERT/UPDATE-Trigger ausweichen und eine Temporary-Tabelle verwenden - Idealerweise fix ins RAM gepinnt, die beim Starten der DB automatisch befüllt wird. Eine Alternative könnten schwierig zu zimmernde materialized Views sein - wobei wenn die Access Materialized Views kennt (keine Ahnung), dann braucht sie dazu eh intern Trigger... Also wenn man das echt so braucht - wirst du vermutlich an Triggern net vorbeikommen.

Sorry, wenn ich nicht helfen konnte - aber ich hab's versucht... Bitte schau aber mal bei meiner Fragenstellung vorbei...

cu
gepeinigter




Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
..
Re(2): Access-Abfrage kniffliges Problem...
12.02.2006, 22:07:31
bei der Du mir evtl. helfen kannst
Ich schaue mal rein... :-)

Ich finde dein Datenmodell Suboptimal
Leider. Am Anfang war es relativ einfach: Es gibt 25 Excel-Files mit Contactinfo, und zu jeden Person gibt es eine Adresse. Das war ja einfach, dabei hätte ich nur das Land in eine Tabelle auslagern müssen und wäre fertig gewesen. Aber ich wollte ja gescheit sein und die Kontakte auch zu Organisationen zuordnen, wobei ein Kontakt pro Organisation ein andere Adresse haben kann. Jemand kann als Europarlementarier eine Kontaktadresse in Brüssel haben, und als Vorsitzender einer NGO eine andere Adresse. Und dann ist es aus dem Ruder gelaufen. Insgesamt hat es eh noch halbwegs funktioniert, wenn da mein Chef (der null Ahnung von Datenmodellierung hat) nicht beim Export nach Excel (eine Zeile pro Kontakt) alle Organisationen (mit Adressen) zu diesen Person dazu haben wollte... :-(

mehrere Spalten rauskommen sollen ...... nachher leicht programmatisch weiterverwenden kann
Nicht leicht, aber als Export sollte es reichen. Ich ignoriere dabei einfach der Tatsache das in Excel bei 256 Spalten schluß ist, und werde mich darum kümmern wenn es zu den Fehler gekommen ist... :-)

Deine Kode werde ich nicht verwenden, weil ich inzwischen schon ganz andere Vorgaben bekommen habe (jetzt erst hat mein Chef bei den andere Leute gefragt was die eigentlich brauchen), und ich (so wie es ausschaut) beim Datenmodell sovel ändern muß, dass ich fast neu anfangen kann... :-/

Ardjan

<stolz> Mein Sohn! </stolz>

   !!! VIRUSWARNUNG !!!
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung