SQL Stmt mit 4 Tabellen und einer Bedingung

The_Answer1985

Erfahrenes Mitglied
Hallo alle miteinander,

ich brauche Hilfe bei einem SQL Stmt, das bis zu 4 Tabellen umfassen kann und immer eine Bedingung an Bord hat.

Das Stmt setzt sich zusammen aus Benutzereingaben, je nachdem welche Spalten aus der Tabelle für ihn wichtig sind, werden diese angezeigt.
Kleines Bsp:

Der Benutzer möchte alle Kunden (tabelle 1) eines Landes (eingegebener Suchbegriff) anzeigen, dafür möchte er zusätzlich die E-Mail (tabelle 2) (und ggf. weitere Spalten aus zusätzl Tabellen) anzeigen.

Ich scheitere daran, die 4 Tabellen miteinander durch ein JOIN zu verknüpfen und die Suchbedingung unterzubringen.

Mein Stmt schaut mittlerweile folgendermaßen aus:
Code:
SELECT Kunde.Kdnr, Kunde.Name, Kunde.Plz, Kunde.Ort, Partner.KdNr, Partner.EMail 
FROM Kunde INNER JOIN Partner ON (Kunde.KdNr= Partner.KdNr)
WHERE Kunde.Plz = 12345;

Danke für eure Hilfe.

Liebe Grüße
 
Code:
SELECT Kunde.Kdnr, Kunde.Name, Kunde.Plz, Kunde.Ort, Partner.KdNr, Partner.EMail, Tabelle3.Wert2, T4.Wert5
FROM Kunde
INNER JOIN Partner ON (Kunde.KdNr= Partner.KdNr)
INNER JOIN Tabelle3 ON Partner.PartnerNr = Tabelle3.PartnerNr
INNER JOIN Tabelle4 as T4 ON Tabelle3.T3Nr = T4.T3Nr
...
WHERE Kunde.Plz = 12345  AND Tabelle3.Wert2 = 'foo' AND T4.Wert9 = 'bar';

Du kannst mehrere Joins hinteeinanderhängen und am Schluss wird mit Where nochmal eingeschränkt. Wenn du wie im letzten JOIN mit "as" Kürzel für die Tabellen vergibst, brauchst du bei Zugriff auf Feldnamen, den Tabellennamen nicht mehr ausschreiben.
 
Zuletzt bearbeitet:
Danke schonmal, das schaut gut aus!

Ich erhalte die Fehlermeldung, dass 3 Parameter fehlen, die erwartet werden.
Es handelt sich jeweils um die KdNr und die E-Mail...

ich versteh nur nicht, warum diese Felder gebraucht werden, wenn ich eigentlich nur die Datensätze anzeigen will, deren (in diesem Bsp.) PLZ mit dem Suchbegriff übereinstimmen und die passenden Werte dazu aus der anderen Tabelle mit übereinstimmender kdNr.

Hoffe das war jetzt verständlich :)
Kannst du mir dabei vllt weiter helfen?

Liebe Grüße
 
Hab gegoogelt, es lag an 3 Spaltennamen, die er nicht eindeutig finden konnte.

Hab aber doch ein Problem, und zwar wird mir nicht unbedingt das angezeigt, was ich haben möchte.

Ich möchte alle Datensätze aus zwei oder mehreren Tabellen, die die gleiche Kundennummer haben und wo der Suchbegriff mit einem/mehreren Werten aus einer der Tabellen übereinstimmt.

Ist deine obige Abfrage dafür brauchbar?
Oder müsste ich das Stmt dafür anderes definieren?

Liebe Grüße
 
Da wäre mal ein datenbank layout (inclusive primär und fremdschlüssel beziehungen) mal hilfreich, sonst hab ich da nicht wiklich nen Ansatzpunkt wo das Problem liegen könnte.
Ausserdem wäre der SQL Query und die fehlermeldung interessant.
 
Fehlermeldung gibt es keine, es werden nur viel zu viele Datensätze ausgegeben.

DBS: access
Tabelle Kunde
KdNr int
ID int PK
Name String
Straße String
HausNr String
PLZ String
Ort String

Tabelle Partner
KdNr int
ID int PK
Name String
Vorname String

hab nicht alle Spalten angegeben, sind aber alle relevanten.

Query:
Code:
SELECT Kunde.KdNr, Kunde.KdNr, Kunde.Plz, Kunde.Ort, Partner.EMail 
FROM Kunde 
INNER JOIN Partner ON (Kunde.KdNr= Partner.KdNr)WHERE Kunde.Plz = '12345'
 
Ich kann mir jetzt in dem beispiel nicht vorstellen, welche unbeabsichten Datensätze da zuviel ausgegeben werden.

Es werden die Tabelle Kunde und die Tabelle Partner anhand der Kundennummer verknüpft und danach nur die ausgegeben, bei denen die PLZ = 12345 ist.

Wenn in der Spalte Kunde.Plz immer 12345 steht, dann ist das die Ausgabe, die gewollt ist.

Wenn nach etwas anderem gefragt ist, dann müsstest du da schon spezieller werden, denn so kann ich dir nicht mehr sagen.
 
Das hast du schon richtig erkannt! Ich habe den gleichen Datensatz mehrmals.

Hab aber gerade ein ganz anderes Problem:
Führe ich die Abfrage in Access aus, erhalte ich ein Ergebnis ohne Probleme (zwar ist der Datensatz 3 mal vorhanden, aber wenigstens wird er geliefert)

Wenn ich in meinem Programm (java) auf die einzelnen Spalten der Abfrage zugreifen möchte, erhalte ich nur die Fehlermeldung

"Ungültiger Deskriptorindex".

Das bedeutet normalerweise, dass die Spalte, die ich versuche anzuzeigen, nicht da ist. Aber in der Access Abfrage seh ich ja, dass sie vorhanden ist.
Hast du eine Idee woran es liegen könnte?

Liebe Grüße
 
zum ersten Punkt:
ohne genauen Query und die struktur aller Tabellen steh ich leider n bisschen an

zum zweiten:
Ist eher ne Frage fürs java Forum, ich könnte mir nur vorstellen, dass der angegebene Spaltenname nicht passt. vielleicht hast du den mit "tabelle.spalte" bzw "alias.spalte" angegeben. Aber bin kein Java Experte
 
Zurück