AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ich blicke bei JOINS nicht durch

Ich blicke bei JOINS nicht durch

Ein Thema von guidok · begonnen am 3. Apr 2008 · letzter Beitrag vom 4. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2   
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#1

Ich blicke bei JOINS nicht durch

  Alt 3. Apr 2008, 15:24
Datenbank: MSSQL Express • Version: 2005 • Zugriff über: ADO
Hallo,

ich habe zwei Tabellen TEPL und MAINT

In MAINT kann zu einem bestehenden Datensatz ein oder mehrere Datensätze existieren, dazu gibt es als eindeutigen Schlüssel das Feld TEPL.ID und in MAINT das Feld TEPLID.

Ich möchte nun alle Datensätze aus TEPL auslesen und erfahren zu welchen davon auch eine oder mehrere Datensätze in MAINT existieren.

Dieser Versuch von mir liefert leider nur die Datensätze bei denen auch in der Tabelle MAINT ein korrespondierender Datensatz vorliegt und nicht alle Datensätze von TEPL

Delphi-Quellcode:
    SQL.Add('SELECT A.*, B.TEPLID FROM TEPL A' +
            ' JOIN MAINT B' +
            ' ON A.TP=B.TEPLID;');
Irgendwie blicke ich bei den JOINS noch nicht durch. Kann mir mal jemand helfen?

Ein Tutorial zu den verschiedenen JOINS wäre auch nicht schlecht.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.763 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Ich blicke bei JOINS nicht durch

  Alt 3. Apr 2008, 15:30
Link 1: http://www.sql-und-xml.de/sql-tutori...-mit-join.html
Link 2: http://www.sql-tips.de/index.php/INN...N_-_OUTER_JOIN
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.247 Beiträge
 
Delphi XE7 Professional
 
#3

Re: Ich blicke bei JOINS nicht durch

  Alt 3. Apr 2008, 15:36
[OT] Link [/OT]

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
572 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: Ich blicke bei JOINS nicht durch

  Alt 3. Apr 2008, 15:40
Was du brauchst, ist ein OUTER JOIN.

Im "alten" SQL-Stiel ( @ DeddyH) hätte ich es so gemacht:
SQL-Code:
SELECT
  A.*, B.TEPLID
FROM
  TEPL A, MAINT B
WHERE
  A.TP = B.TEPLID(+);
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.763 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Ich blicke bei JOINS nicht durch

  Alt 3. Apr 2008, 15:41

Er kann aber auch einfach LEFT JOIN schreiben, sollte dasselbe bewirken.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
gsmgrufti

Registriert seit: 14. Sep 2006
Ort: Nürnberg
23 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Ich blicke bei JOINS nicht durch

  Alt 3. Apr 2008, 16:55
Mein Favorit : SQL-Doku
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#7

Re: Ich blicke bei JOINS nicht durch

  Alt 4. Apr 2008, 06:29
Dank an alle, für die Hilfe. Das LEFT JOIN funktioniert - fast.

Problem ist nun, dass, falls in MAINT mehrere Datensätze mit der selben MAINT.TEPLID vorhanden sind, TEPL.ID mehrmals in der Ausgabe auftaucht. Ich möchte aber nur wissen, ob zu einer TEPL.ID ein oder mehrere Datensätze vorhanden sind, mit übereinstimmender MAINT.TEPLID.

Hintergrundinfo: Es handelt sich bei TEPL um eine Tabelle mit Technischen Plätzen und bei MAINT um Wartungen, die dazu angelegt sind. Ich möchte einfach in der Liste ALLER Technischen Plätze anzeigen, ob dazu bereits eine Wartung angelegt wurde.

Ich habe versucht:

Delphi-Quellcode:
    SQL.Add('SELECT A.*, COUNT(B.TEPLID) AS HASMAINT FROM TEPL A' +
            ' LEFT JOIN MAINT B' +
            ' ON A.TP=B.TEPLID;');
Klappt aber nicht.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.207 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

Re: Ich blicke bei JOINS nicht durch

  Alt 4. Apr 2008, 06:48
Du machst auch einen LEFT JOIN, dann werden die Informationen der 2. Tabelle hinzugefügt. Falls mehrere Datensätze die gleiche Informationen haben erscheinen diese natürlich doppelt.
Wie sollte das Ergebnis aussehen? das beim 2. Auftreten dieser Informationen diese nicht mehr gejoint werden? das geht so natürlich nicht. was ist die wichtig die daten aus Tepl oder die Daten aus MAINT?
Markus Kinzler
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#9

Re: Ich blicke bei JOINS nicht durch

  Alt 4. Apr 2008, 06:53
In erster Linie möchte ich die Datensätze aus TEPL anzeigen und falls dazu ein passender Datensatz in MAINT existiert (also eine Wartung angelegt wurde), dann möchte ich diese Information visualisieren. Ich brauche in erster Linie nur einen Wahrheitswert, der mir aussagt, ob passende Daten vorliegen. Die genauen Daten in MAINT werden an anderer Stelle angezeigt und bearbeitet.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.207 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

Re: Ich blicke bei JOINS nicht durch

  Alt 4. Apr 2008, 06:56
SQL-Code:
SELECT
   A.*,
   IIF( B.TEPLID is Null, False, True) AS HASMAINT
FROM
    TEPL A
         LEFT JOIN MAINT B ON B.TEPLID=A.TP;
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf