SQL Tabellen verbinden mit nur teilweise Daten
Hi Admins,
ich bin auf dem Datenbankgebiet noch ganz frisch unterwegs und zähle auf eure Hilfe
Ich habe eine Tabelle die ich mit einer anderen verknüpfen möchte. In der Ausgangstabelle sind 2 Werte vorhanden die jeweils die ID des Kontos und des Gegenkontos enthalten. In der 2. Tabelle sind die Kontobezeichnungen der jeweiligen ID zugeordnet. Im Ergebnis sollen die Daten der Tabelle 1 mit den Kontobezeichnungen der Tabelle 2 ergänzt werden. Das ist ja alles noch kein Problem. Doch in der Tabelle 1 kann es sein, dass das Gegenkonto keinen Wert enthält und nur eine ID für das Konto vorhanden ist. Wenn ich jetzt die Verknüpfung für das Konto und eine 2. Verknüpfung für das Gegenkonto vornehme werden nur noch die Datensätze ausgegeben die im Feld Gegenkonto eine ID enthalten. Ich hätte aber gerne alle Datensätze und wenn keine ID für das Gegenkonto vorhanden ist sollte die Kontobezeichnung für das Gegenkonto einfach leer bleiben. So in der Art
Wenn ID-Gegenkonto vorhanden dann hole die Kontobezeichnung ansonsten tue nichts
Wie gesagt, das ist noch absolutes Neuland für mich und ich bin über jede Hilfe dankbar.
Schöne Grüße
Joni
ich bin auf dem Datenbankgebiet noch ganz frisch unterwegs und zähle auf eure Hilfe
Ich habe eine Tabelle die ich mit einer anderen verknüpfen möchte. In der Ausgangstabelle sind 2 Werte vorhanden die jeweils die ID des Kontos und des Gegenkontos enthalten. In der 2. Tabelle sind die Kontobezeichnungen der jeweiligen ID zugeordnet. Im Ergebnis sollen die Daten der Tabelle 1 mit den Kontobezeichnungen der Tabelle 2 ergänzt werden. Das ist ja alles noch kein Problem. Doch in der Tabelle 1 kann es sein, dass das Gegenkonto keinen Wert enthält und nur eine ID für das Konto vorhanden ist. Wenn ich jetzt die Verknüpfung für das Konto und eine 2. Verknüpfung für das Gegenkonto vornehme werden nur noch die Datensätze ausgegeben die im Feld Gegenkonto eine ID enthalten. Ich hätte aber gerne alle Datensätze und wenn keine ID für das Gegenkonto vorhanden ist sollte die Kontobezeichnung für das Gegenkonto einfach leer bleiben. So in der Art
Wenn ID-Gegenkonto vorhanden dann hole die Kontobezeichnung ansonsten tue nichts
Wie gesagt, das ist noch absolutes Neuland für mich und ich bin über jede Hilfe dankbar.
Schöne Grüße
Joni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 156534
Url: https://administrator.de/contentid/156534
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
10 Kommentare
Neuester Kommentar
Moin joni2000de,
wenn du noch ganz frisch bist auf dem Datenbankgebiet, dann gleich die wichtigste Lektion:
Was du brauchst ist ein so genannter LEFT JOIN (alle Sätze aus der linken, zuerst erwähnten tabelle anzeigen plus die Werte aus der als zweites genannten Tabelle, sofern vorhanden).
Aber selbst ein LEFT JOIN - Statement kann je nach DBMS (Oracle, mySQL, PostGreSQL,....) klitzekleine Syntaxunterschiede haben.
Grüße
Biber
wenn du noch ganz frisch bist auf dem Datenbankgebiet, dann gleich die wichtigste Lektion:
Fragen zu SQL lasssen sich nur beantworten, wenn ein bestimmtes (=namentlich genanntes) Datenbankblech drunterliegt.
Was du brauchst ist ein so genannter LEFT JOIN (alle Sätze aus der linken, zuerst erwähnten tabelle anzeigen plus die Werte aus der als zweites genannten Tabelle, sofern vorhanden).
Aber selbst ein LEFT JOIN - Statement kann je nach DBMS (Oracle, mySQL, PostGreSQL,....) klitzekleine Syntaxunterschiede haben.
Grüße
Biber
Moin Joni,
Oracle bietet beim left join eine spezielle Schreibweise an, nämlich ein (+) hinter die Spalte, die zu der entsprechenden Tabelle gehört,das wäre bei Dir dann
Sauberer wäre allerdings die allgemein gültige Schreibweise
Die Tabellenverküpfungen also raus aus dem where und die ganzen Tabellen mit join verbunden.
Gruß, Mad Max
Oracle bietet beim left join eine spezielle Schreibweise an, nämlich ein (+) hinter die Spalte, die zu der entsprechenden Tabelle gehört,das wäre bei Dir dann
... AND KONTO_1.ID(+) = BUP.GEGENKONTOID AND ...
Sauberer wäre allerdings die allgemein gültige Schreibweise
SELECT BK.ONR, KONTO.KONTONUMMER, KONTO.KONTONAME, KONTO_1.KONTONUMMER, KONTO_1.KONTONAME, BKO.BNUMMER, BUP.TEXT, BUP.BART, BUP.SH, BUP.NBETRAG, BUP.SBETRAG, BUP.STEUER, BUP.WS
FROM DB1.BKO BKO
join DB1.BUP BUP on BKO.ID = BUP.BKOID
join DB1.KONTO KONTO on KONTO.ID = BUP.KONTOID
join DB1.BK BK on BK.ID = KONTO.BKID
left join DB1.KONTO KONTO_1 on KONTO_1.ID = BUP.GEGENKONTOID
WHERE ((BK.ONR=1410) AND (BUP.WERTSTELLUNG>={ts '2010-01-01 00:00:00'} And BUP.WERTSTELLUNG<={ts '2010-01-31 00:00:00'}))
Die Tabellenverküpfungen also raus aus dem where und die ganzen Tabellen mit join verbunden.
Gruß, Mad Max
Moin joni2000de,
Vielleicht fällt denen etwas ein oder auf und somit auch etwas für dich ab.
Grüße
Biber
Zitat von @joni2000de:
das will aber nicht. Wenn ich eine einfach Abfrage schreibe, dann klappt es. Aber in meiner Abfrage nicht?????
Wie kann ich der Sache auf den Grund gehen?
Du könntest diese bockige Abfrage mal anderen Leuten zeigen...das will aber nicht. Wenn ich eine einfach Abfrage schreibe, dann klappt es. Aber in meiner Abfrage nicht?????
Wie kann ich der Sache auf den Grund gehen?
Vielleicht fällt denen etwas ein oder auf und somit auch etwas für dich ab.
Grüße
Biber