Top-Themen

Aktuelle Themen (A bis Z)

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, 5701 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 ..
Ähnliche Inhalte
Datenbanken
Access bzw. SQL Daten verbinden
Frage von Sailor77Datenbanken4 Kommentare

Guten Abend in das Forum. Ich habe ein Problem bei der Erstellung einer Abfrage in Access, bei dem ich ...

Server
SQL-Tabelle portieren und dabei Daten konvertieren
gelöst Frage von menaceServer1 Kommentar

Hallo zusammen, ich bin aktuell dabei eine Homepage (CMS + SQL DB) auf einen neuen Server zu migrieren und ...

Entwicklung
SQL Update aus derselben Tabelle
gelöst Frage von winscheilEntwicklung1 Kommentar

Hallo, ich habe folgendes Problem. Ich habe eine Tabelle die folgendermaßen aufgebaut ist. Auftrag Rechnung Position Artikel Kosten NULL ...

Datenbanken
Foto aktualisieren in SQL Tabelle
gelöst Frage von Dr.CornwallisDatenbanken2 Kommentare

Liebe Gemeinde, ich habe eine Access Datenbank auf einen SQL Server hochgeladen. In dieser Datenbank gibt es eine Tabelle ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 5 StundenErkennung und -Abwehr1 Kommentar

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücke Spectre und ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office9 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...