Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ich blicke bei JOINS nicht durch (https://www.delphipraxis.net/111441-ich-blicke-bei-joins-nicht-durch.html)

guidok 3. Apr 2008 16:24

Datenbank: MSSQL Express • Version: 2005 • Zugriff über: ADO

Ich blicke bei JOINS nicht durch
 
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

DeddyH 3. Apr 2008 16:30

Re: Ich blicke bei JOINS nicht durch
 
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

Klaus01 3. Apr 2008 16:36

Re: Ich blicke bei JOINS nicht durch
 
[OT] Link [/OT]

Grüße
Klaus

gmc616 3. Apr 2008 16:40

Re: Ich blicke bei JOINS nicht durch
 
Was du brauchst, ist ein OUTER JOIN.

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

DeddyH 3. Apr 2008 16:41

Re: Ich blicke bei JOINS nicht durch
 
:lol:
Er kann aber auch einfach LEFT JOIN schreiben, sollte dasselbe bewirken.

gsmgrufti 3. Apr 2008 17:55

Re: Ich blicke bei JOINS nicht durch
 
Mein Favorit : SQL-Doku

guidok 4. Apr 2008 07:29

Re: Ich blicke bei JOINS nicht durch
 
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.

mkinzler 4. Apr 2008 07:48

Re: Ich blicke bei JOINS nicht durch
 
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?

guidok 4. Apr 2008 07:53

Re: Ich blicke bei JOINS nicht durch
 
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.

mkinzler 4. Apr 2008 07:56

Re: Ich blicke bei JOINS nicht durch
 
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz