Entwickler-Ecke

Datenbanken - Right outer Join


Steamboat Willi - Sa 03.02.18 20:50
Titel: Right outer Join
Habe zwei Tabellen mit einem Join verbunden. Die linke Seite besteht aus einigen Spalten der Haupttabelle und enthält das Feld mit dem Primärschlüssel. Die rechte Seite besteht aus einer ganzen Nebentabelle mit dem gleichen Primärschlüssel. Das habe ich mit den entsprechenden Komponenten realisiert. Wenn jetzt die Haupttabelle einen Datensatz enthält, müßte meiner Meinung nach der entsprechende Teil auch über den Join angezeigt werden, was aber nicht der Fall ist. Wie kann ich diesen Fehler beheben?

Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Sa 03.02.2018 um 20:13
Moderiert von user profile iconNarses: zweite Frage entfernt


Sinspin - So 04.02.18 19:11

Hallo, ich versuche gerade deine Beschreibung zu verstehen, aber mir kommt es vor als wenn Du zwei Sachen mixt.

Was hast Du gemacht?
A: Ein SQL Script geschrieben das einen JOIN enthält und Du sieht keine Feldinhalte der Nebentabelle?
B: Zwei Tabellen via Master/Detail Beziehung miteinander verbunden und es fehlen die Daten der Detail-Tabelle?


Steamboat Willi - Mo 05.02.18 13:54

ich habe ein SQL-Script mit einem Join geschrieben, das ich auf der Delphi-Oberfläche anzeigen möchte. Wenn die Haupttabelle einen Datensatz enthält, wird der entsprechende Anteil nicht im Join angezeigt.


Sinspin - Mo 05.02.18 18:02

Es ist leider nicht wirklich möglich Dir zu helfen ohne Dein SQL Script zu sehen. Gerade bei Joins ist das leider selbst dann noch schwierig da es an den Daten der Tabelle liegen kann.
Aber lass bitte erstmal das Script sehen.


Steamboat Willi - Di 06.02.18 14:10

Hier ist das Script:


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
SELECT
   b.MITGLIEDSNUMMER, b.NACHNAME,
   b.VORNAME, b.GEBURTSDATUM, a.MITGLIEDSNUMMER,
   a.STRASSE, a.LAND, a.POSTLEITZAHL, a.WOHNORT,
   a.TELEFON_PRIVAT, a.TELEFON_GESCHAEFTLICH,
   a.FAX_PRIVAT, a.FAX_GESCHAEFTLICH,
   a.TELEFON_MOBIL, a.E_POST_PRIVAT,
   a.E_POST_GESCHAEFTLICH
 FROM BASISDATEN b
  RIGHT OUTER JOIN ADRESSE a
   ON a.MITGLIEDSNUMMER = b.MITGLIEDSNUMMER


Damit werden alle Felder im Grid angezeigt, nur die Inhalte der Basisdaten nicht.

Moderiert von user profile iconChristian S.: SQL-Tags hinzugefügt


Sinspin - Di 06.02.18 15:25

Hast Du das Script mal in einem SQL Designer oder SQL Tool zu deiner DB ausgeführt?
Ich mein, dass Du nicht mit den Grid im Programm arbeiten musst. Dann ist zumindest Ausgeschlossen dass es an dem liegen kann.


Ralf Jansen - Di 06.02.18 16:36

Ich vermute du willst einen Left outer join und keinen right outer join.
Zumindest scheint mir der Fall "ich habe eine Adresse dazu aber kein Mitglied dann zeig mir wenigstens die Adresse" an nicht sinnvoll.


Steamboat Willi - Do 08.02.18 13:14

Vielen Dank, ich bin einen Schritt weiter.
Ich habe den SQL-Code in Database tour geändert:

SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
SELECT
   b.MITGLIEDSNUMMER, b.NACHNAME,
   b.VORNAME, b.GEBURTSDATUM,
   a.MITGLIEDSNUMMER,
   a.STRASSE, a.LAND, a.POSTLEITZAHL,
   a.WOHNORT, a.TELEFON_PRIVAT, a.TELEFON_GESCHAEFTLICH,
   a.FAX_PRIVAT, a.FAX_GESCHAEFTLICH, a.TELEFON_MOBIL,
   a.E_POST_PRIVAT, a.E_POST_GESCHAEFTLICH

 FROM ADRESSE a
  RIGHT OUTER JOIN BASISDATEN b
   ON a.MITGLIEDSNUMMER = b.MITGLIEDSNUMMER

Das wird unabhängig davon, ob ich einen LEFT oder RIGHT OUTER JOIN verwende, dort ausgeführt, d.h. die Feldinhalte "BASISDATEN" werden dort angezeigt.
Das gleiche passiert in Delphi, wenn ich dort unter "SelectSQL" die gleiche Sequenz eingebe.
Was noch nicht funktioniert, ist "INSERT into ADRESSE". Delphi hat mir hier folgenden Code erzeugt:

SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
insert into ADRESSE
  (MITGLIEDSNUMMER, STRASSE, LAND, POSTLEITZAHL, WOHNORT, TELEFON_PRIVAT, 
   TELEFON_GESCHAEFTLICH, FAX_PRIVAT, FAX_GESCHAEFTLICH, TELEFON_MOBIL, 
   E_POST_PRIVAT, E_POST_GESCHAEFTLICH)
values
  (:MITGLIEDSNUMMER, :STRASSE, :LAND, :POSTLEITZAHL, :WOHNORT, :TELEFON_PRIVAT, 
   :TELEFON_GESCHAEFTLICH, :FAX_PRIVAT, :FAX_GESCHAEFTLICH, :TELEFON_MOBIL, 
   :E_POST_PRIVAT, :E_POST_GESCHAEFTLICH)

Kann mir jemand hierfür einen Tip geben?

Moderiert von user profile iconNarses: SQL-Tags hinzugefügt