Zitat von
Leonard:
Zitat von
f4k3:
mhm ... dat is schlecht ... weil ich beide Prüfungen brauche ...
aber JOINS lassen sich bestimmt mit AND, OR, XOR verknüpfen oder?
Das sollte gehen. Kann es aber auch sein, dass in k.KON_KONTAKTART_ID und kt.KON_KONTAKTART_ID die gleichen Werte stehen?
Noch etwas anderes ist mir jetzt aufgefallen. Es kann auch noch sein, dass du die letzten beiden INNER JOIN Anweisungen tauschen musst. Die Verknüpfung zu
kasp wird erst in der letzten Anweisung erstellt, aber schon in der vorherigen verwendet. Es kann aber sein, dass Firebird das so kann.
Alt:
SQL-Code:
INNER JOIN KON_ABTEILUNG kabt ON (kasp.ABTEILUNG_ID = kabt.KON_ABTEILUNG_ID)
INNER JOIN KON_ANSPRECHPARTNER kasp ON (kasp.KONTAKT_ID = k.KON_ID)
Neu:
SQL-Code:
INNER JOIN KON_ANSPRECHPARTNER kasp ON (kasp.KONTAKT_ID = k.KON_ID)
INNER JOIN KON_ABTEILUNG kabt ON (kasp.ABTEILUNG_ID = kabt.KON_ABTEILUNG_ID)
Alles klar
... Die alte Variante funktioniert aber auch ... habs in Database Workbench 3 Lite for Firebird getestet.
Mir is nur n kleiner Fehler unterlaufen ... also ich möchte ja nur die Informationen zu einem bestimmten Kontakt.
und ich hab 8 Tabellen für meine Kontaktverwaltung (kommen später noch mehr) ... Es ist aber keine notwendigkeit dass
in allen Tabellen Informationen zum Kontakt vorhanden sein müssen. Wenn bei meiner Abfrage jedoch in einem
JOIN kein
Datensatz gefunden wird ... ist der Kontakt auch nicht in der Ergebnismenge obwohl ich genau nach diesem Kontakt Suche ...
Muss ich dass dann mit einem
OUTER JOIN lösen oder alle JOINS rausschmeissen und die Daten händisch abfragen? mit einer
WHERE-Klausel?
Ich hab nämlich mein Lösungsansatz mal an ein paar Testdaten ausprobiert und bin drauf gestossen dass ich nach einem
Benutzer suche ... der aber nicht in der Ergebnismenge auftaucht obwohl er vorhanden ist, weil eben in 2 Tabellen die mit
JOINS abgefragt werden keine Werte zu diesem Nutzer enthalten sind ... wenn ich Werte einfüge wird der Benutzer angezeigt ...
Hier mal die Abfrage ...
SQL-Code:
SELECT
// BEN
b.BEN_ID, b.RECHTE_ID, b.ABTEILUNG_ID, b.BENUTZERNAME, b.PASSWORT,
b.VORNAME, b.NACHNAME, b.GEBURTSTAG, b.EINSTELLUNGSDATUM, b.ENTLASSUNGSDATUM,
b.EINGELOGGT,
// BEN_ABTEILUNG
bab.BEN_ABTEILUNG_ID, bab.ABTEILUNGSNAME,
// BEN_ADRESSE
bad.BEN_ADRESSE_ID, bad.BENUTZER_ID, bad.KONTAKTART_ID, bad.STRASSE,
bad.POSTLEITZAHL, bad.ORT,
// BEN_EMAIL
be.BEN_EMAIL_ID, be.BENUTZER_ID, be.KONTAKTART_ID, be.EMAIL_ADRESSE,
// BEN_KONTAKTART
bk.BEN_KONTAKTART_ID, bk.BEZEICHNUNG, bk.BESCHREIBUNG,
// BEN_NOTIZEN
bn.BEN_NOTIZEN_ID, bn.BENUTZER_ID, bn.BEZEICHNUNG, bn.BESCHREIBUNG,
bn.ANGELEGT, bn.GEAENDERT,
// BEN_RECHTE
br.BEN_RECHTE_ID, br.BEZEICHNUNG, br.ADMINISTRATOR,
// BEN_TELEFON
bt.BEN_TELEFON_ID, bt.BENUTZER_ID, bt.KONTAKTART_ID, bt.RUFNUMMER
FROM BEN b, BEN_KONTAKTART bk
// INNER JOIN BEN_RECHTE
INNER JOIN BEN_RECHTE br
ON (b.RECHTE_ID = br.BEN_RECHTE_ID)
// INNER JOIN BEN_ABTEILUNG
INNER JOIN BEN_ABTEILUNG bab
ON (b.ABTEILUNG_ID = bab.BEN_ABTEILUNG_ID)
// INNER JOIN BEN_ADRESSE
INNER JOIN BEN_ADRESSE bad
ON (bad.BENUTZER_ID = b.BEN_ID)
// INNER JOIN BEN_EMAIL
INNER JOIN BEN_EMAIL be
ON (be.BENUTZER_ID = b.BEN_ID)
// INNER JOIN BEN_NOTIZEN
INNER JOIN BEN_NOTIZEN bn
ON (bn.BENUTZER_ID = b.BEN_ID)
// INNER JOIN BEN_TELEFON
INNER JOIN BEN_TELEFON bt
ON (bt.BENUTZER_ID = b.BEN_ID) AND (bt.KONTAKTART_ID = bk.BEN_KONTAKTART_ID)
WHERE b.BENUTZERNAME = 'Jonny'
MfG f4k3