Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

komplizierte SQL-Abfrage (glaube ich)





Frage

Hallo Leute, ich versuche mal mein Problem zu schildern. Es geht um Kontobeziehungen, also um Gattungsdaten, wer mit wem ein Konto hat usw. Also ich habe zwei Tabellen, die Ausgangstabelle ist die Tabelle1. In dieser Tabelle sind alle Kunden aufgelistet. Von jedem Kunden wird ein eindeutiger Personenschlüssel erstellt. In der zweiten Tabelle sind nun sämtliche Beziehungen. Key1 stellt halt die erste und Key2 die zweite Person dar. Ich bräuchte nun in einer Abfrage jeweils die Kundennummer zu Key1 und Key2. Bei der Arbeit kann ich leider nur mit Microsoft Access arbeiten, daher kann ich leider nicht alles ausprobieren. Wäre super wenn mir da jemand helfen könnte, bin schon ein bißchen am verzweifeln :) [b]TABELLE1[/b] [b]Kdnr.............Name.............Vorname...Pers_key1[/b] 1234............Pflaume.........Kai..............1111 2345............Schmidt.........Jürgen........2222 3456............Peters............Heiner........3333 4567............Geller.............Uri...............4444 5678............Schörder.......Gerhard......5555 6789............Raab..............Stefan.........6666 7890............Gottschalk....Thomas......7777 8901............Kohl...............Helmut........8888 9012............Merkel............Angela........9999 [b]TABELLE2[/b] [b]Key1............Key2............Beziehungsart[/b] 1111............2222............abc 1111............5555............fgh 2222............3333............xyz 2222............6666............abc 3333............4444............fgh 3333............7777............xyz 4444............5555............xyz 4444............8888............abc 5555............6666............abc 5555............9999............xyz 6666............7777............xyz 6666............4444............fgh 7777............8888............abc 7777............3333............abc 8888............9999............abc 8888............1111............abc 9999............1111............fgh 9999............2222............xyz So [b]sollte [/b]die Abfrage aussehen: [b]ABFRAGE[/b] [b]Kdnr1........Key1..........Key2..........Kdnr2........Beziehungsart[/b] 1234..........1111..........2222..........2345..........abc 1234..........1111..........5555..........5678..........fgh . . . usw.

Antwort 1 von Marten

hat keiner ne idee?

Antwort 2 von disco

moin

das ist kein chat hier. musst dich ggf. etwas gedulden.
hab zwar vor 3 jahren das letzte mal was mit sql zu tun gehabt, aber müsste dass nicht in etwa so aussehen.

SELECT * FROM TABELLE1 INNER JOIN TABELLE2 ON (TABELLE1.Pers_key1 = TABELLE2.key1)

Allerdings kann TABELLE1.Pers_key1 wohl in TABELLE2.key1 oder TABELLE2.key2 vorkommen....

Da gehts bei mir schon ans raten.
Vielleicht so:
SELECT * FROM TABELLE1 JOIN TABELLE2 WHERE (TABELLE1.Pers_key1 = TABELLE2.key1 OR TABELLE1.Pers_key1 = TABELLE2.key2)

g,
disco

Antwort 3 von Marten

ja ich weiß, bin halt nur grad bei der arbeit. dein statement hab ich auch schon versucht. es lautet dann aber:
SELECT *
FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.Pers_key1=Tabelle2.Key1 or Tabelle1.Pers_key1=Tabelle2.Key2;

Sieht dann so aus:

Kdnr----Name--------Vorname----Pers_key1----Key1----Key2----Beziehungsart
2345----Schmidt----Jürgen-------2222-------------1111----2222----abc
2345----Schmidt----Jürgen-------2222-------------2222----3333----xyz
2345----Schmidt----Jürgen-------2222-------------2222----6666----abc
2345----Schmidt----Jürgen-------2222-------------9999----2222----xyz
3456----Peters-------Heiner-------3333-------------2222----3333----xyz
3456----Peters-------Heiner-------3333-------------3333----4444----fgh
3456----Peters-------Heiner-------3333-------------3333----7777----xyz
3456----Peters-------Heiner-------3333-------------7777----3333----abc

Durch die "oder-Verknüpfung" ist es access egal, welcher Schlüssel wo ist. Zudem bräuchte ich ja noch ein zweites Datenfeld mit der Kundennummer des Key2....

Antwort 4 von TomG

So sollte es gehen

SELECT tabelle1.kdnr, tabelle2.key1, tabelle2.key2, tabelle1a.kdnr as kdnr2, tabelle2.art FROM tabelle2 LEFT JOIN tabelle1 ON tabelle2.key1 = tabelle1.pers_key1 LEFT JOIN tabelle1 as tabelle1a ON tabelle2.key2 = tabelle1a.pers_key1

Gruß
Thomas

Antwort 5 von disco

bevor wir da jetzt weitermachen und einen 2ten join einbauen, möchte ich nochmal nachfragen, warum man eine kdnr und einen pers_key1 in der TABELEL1 benörtigt?

und weisst du, dass man statt " SELECT * " auch einzelne Spalten angeben kann?

Auf jeden fall solltest du dir folgende seiten anschauen, wenn du dich weiter mit sql befassen möchtest:

http://sql.1keydata.com/de/sql-syntax.php
und
http://dev.mysql.com/doc/refman/5.1/de/sql-syntax.html

Antwort 6 von Marten

Hat sich erledigt! Die Lösung ist:

SELECT Tabelle1.kdnr, Tabelle2.key1, Tabelle2.key2, Fiktive_Tabelle.kdnr AS kdnr_2, Tabelle2.beziehungsart
FROM Tabelle1, Tabelle1 AS Fiktive_Tabelle, Tabelle2
WHERE Tabelle2.key1=Tabelle1.Pers_key1 And Tabelle2.key2=Fiktive_Tabelle.pers_key1;

Vielen Dank für die Lösungsansätze!!!

Antwort 7 von TomG

...gerne.

Der Einwand von disco bezüglich der pers_key1 ist berechtigt. Diese wird eigentlich nicht benötigt, außerdem ist dein Datenmodell auch nicht so prickelnd. Anstelle beide Verknüpfungen (key1+key2) in einem Satz zu speichern, wäre es sinnvoller für jede verknüpfung einen satz anzulegen. Diese enthält dann kdnr,key,art

Somit könnten beliebig viele Verknüpfungen erstellt werden. Auch wenn es in Deinem Beispiel vielleicht nicht vorkommt, wäre es für eine Normalisierung der richtige Weg.

Gruß
Thomas

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: