Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

SQL Tabellen verbinden mit nur teilweise Daten

Frage Entwicklung Datenbanken

Mitglied: joni2000de

joni2000de (Level 1) - Jetzt verbinden

07.12.2010 um 19:10 Uhr, 5494 Aufrufe, 10 Kommentare

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
Mitglied: Biber
07.12.2010 um 20:39 Uhr
Moin joni2000de,

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
Bitte warten ..
Mitglied: joni2000de
08.12.2010 um 23:57 Uhr
Hi Biber,

dann mal gleich zum wichtigsten => Oracle 10g

Ich hab mich da mal etwas schlau gemacht bezüglich Left Join, doch das will noch nicht so ganz. Hier ist das SQL Statement (mein erster Versuch wie oben beschrieben):

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, DB1.BK BK, DB1.BUP BUP, DB1.KONTO KONTO, DB1.KONTO KONTO_1

WHERE KONTO.ID = BUP.KONTOID AND BK.ID = KONTO.BKID AND BKO.ID = BUP.BKOID AND KONTO_1.ID = BUP.GEGENKONTOID AND ((BK.ONR=1410) AND (BUP.WERTSTELLUNG>={ts '2010-01-01 00:00:00'} And BUP.WERTSTELLUNG<={ts '2010-01-31 00:00:00'}))

Konto und Konto_1 ist die gleiche Tabelle. Ich habe jetzt probiert den Teil AND KONTO_1.ID = BUP.GEGENKONTOID aus dem WHERE Teil zu löschen und dafür zwischen FROM und WHERE folgendes eingefügt

LEFT JOIN DB1.BUP BUP on BUP.GEGENKONTOID = KONTO_1.ID

doch dann erhalte ich die Meldung, dass die Spaltenbezeichnung nicht eindeutig ist?? Muss ich in dem Fall die Tabelle Konto nur einmal angeben?

Ich hoffe das hilft weiter, ich dreh mich da momentan etwas im Kreis.

Gruß Joni
Bitte warten ..
Mitglied: MadMax
09.12.2010 um 12:41 Uhr
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
01.
... AND KONTO_1.ID(+) = BUP.GEGENKONTOID AND ...
Sauberer wäre allerdings die allgemein gültige Schreibweise
01.
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 
02.
 
03.
FROM	DB1.BKO BKO 
04.
	join DB1.BUP BUP on BKO.ID = BUP.BKOID 
05.
	join DB1.KONTO KONTO on KONTO.ID = BUP.KONTOID 
06.
	join DB1.BK BK on BK.ID = KONTO.BKID 
07.
	left join DB1.KONTO KONTO_1 on KONTO_1.ID = BUP.GEGENKONTOID 
08.
 
09.
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
Bitte warten ..
Mitglied: joni2000de
09.12.2010 um 14:34 Uhr
Hi Max,

danke das hat funktioniert. Jetzt würde ich gerne die Spaltenüberschrift ändern. Doch das will nicht. Müsste das nicht mit

01.
SELECT BK.ONR as NUMMER, ...
funktionieren?

Nochmal danke für eure Hilfe.
Gruß Joni
Bitte warten ..
Mitglied: MadMax
10.12.2010 um 12:50 Uhr
Ja, Joni, genau so funktioniert das
Bitte warten ..
Mitglied: joni2000de
10.12.2010 um 19:16 Uhr
Hi Max,

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?

Gruß Joni
Bitte warten ..
Mitglied: Biber
11.12.2010 um 00:06 Uhr
Moin joni2000de,

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...
Vielleicht fällt denen etwas ein oder auf und somit auch etwas für dich ab.

Grüße
Biber
Bitte warten ..
Mitglied: joni2000de
13.12.2010 um 18:22 Uhr
Hi Biber,

die bockige Abfrage ist die obige saubere Variante von Max. Sorry ich dachte das ist klar

Gruß Joni
Bitte warten ..
Mitglied: MadMax
13.12.2010 um 21:05 Uhr
Moin Joni,

an der Abfrage hast Du aber wohl noch rumgeschraubt, zumindest stand im Original nichts von "as NUMMER" oder sowas. Also bitte die Abfrage, die die Probleme bereitet. Und wenns geht, auch der Fehler, der auftritt. "das will aber nicht" ist ein bisschen zu ungenau.

Gruß, Mad Max
Bitte warten ..
Mitglied: joni2000de
14.12.2010 um 00:03 Uhr
Hi Max, hi Biber,

nochmal ganz langsam.

Die obige Abfrage 1:1 funktioniert problemlos.

Wenn ich dann statt SELECT BK.ONR, KONTO.KONTONUMMER... die Abfrage auf SELECT BK.ONR as NUMMER, KONTO.KONTONUMMER... abändere damit die Spalte nicht ONR sondern Nummer heißt passiert folgendes:

In MS Query wird einfach der Teil as Nummer aus der Abfrage gelöscht und diese dann "normal" durchgeführt => keine Fehlermeldung aber die Spalte heißt immer noch ONR.

Ich habe gerade die Abfrage in ein Excelmakro übertragen (wo sie schlussendlich auch hin muss) und da funktioniert das mit dem Umbenennen
Warum MS Query hier so herumzickt weiß ich nicht. Ist mir im Moment auch egal Hauptsache es funktioniert. Hätte ich doch lieber gleich mal probiert.

Auf jeden Fall nochmal danke an euch beide!

Gruß Joni
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Datenbanken
2 SQL Abfragen verbinden

Frage von cuxmini zum Thema Datenbanken ...

Server
gelöst SQL-Tabelle portieren und dabei Daten konvertieren (1)

Frage von menace zum Thema Server ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...