![]() |
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:
Irgendwie blicke ich bei den JOINS noch nicht durch. Kann mir mal jemand helfen?
SQL.Add('SELECT A.*, B.TEPLID FROM TEPL A' +
' JOIN MAINT B' + ' ON A.TP=B.TEPLID;'); Ein Tutorial zu den verschiedenen JOINS wäre auch nicht schlecht. Danke |
Re: Ich blicke bei JOINS nicht durch
|
Re: Ich blicke bei JOINS nicht durch
|
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(+); |
Re: Ich blicke bei JOINS nicht durch
:lol:
Er kann aber auch einfach LEFT JOIN schreiben, sollte dasselbe bewirken. |
Re: Ich blicke bei JOINS nicht durch
Mein Favorit :
![]() |
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:
Klappt aber nicht.
SQL.Add('SELECT A.*, COUNT(B.TEPLID) AS HASMAINT FROM TEPL A' +
' LEFT JOIN MAINT B' + ' ON A.TP=B.TEPLID;'); |
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? |
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.
|
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 00:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz