SQL Frage zu den JOIN Befehlen

dirkules91

Newbie
Registriert
Feb. 2014
Beiträge
5
Hallo liebe Foranden,

Zur Zeit würde ich gerne zwei Tabellen per SQL mit einem JOIN Befehl miteinander verbinden.

Ausgangssituation: 2 Tabellen per LEFT JOIN ON Tbl1.Spalte5 = Tbl2.Spalte1 miteinander verbunden.

Ergebnis: Die entstandene Tabelle enthält alle Spalten aus den beiden Tabellen, bis auf die Spalte, die ich als JOIN Argument verwendet habe.

Frage: Gibt es eine Möglichkeit, dass auch Tbl1.Spalte5 bzw Tbl2.Spalte1 (JOIN Argument) in meiner Ergebnistabelle einmal enthalten ist?

Vielen Dank bereits im Voraus für eure Hilfe!

MfG

dirkules91
 
Du kannst doch in der SELECT-Klausel explizit angeben, welche Spalten im Ergebnis enthalten sein sollen?
 
Es sind zwei Spalten die du sehen willst und nicht nur eine. Du brauchst ja beide um z.B. zu ermitteln welche Zeilen es in der einen und nicht in der anderen Tabelle gibt. Also solltest du genau die explizit angeben die du sehen willst.
 
Hallo NullPointer,

Ich habe in meinem SELECT Statement einfach mit einem * Signalisiert, dass ich alle Spalten haben möchte.

Du meinst also, ich muss dort jede Spalte aufzählen und diese durch Kommas trennen?
 
Poste doch einfach mal deinen vollständigen Select Befehl.
 
Ich glaube ich muss ein bisschen weiter ausholen, eventuell liegt das Problem ja auch an anderer Stelle.

Ich Programmiere gerade in Access VBA. Ich will Daten aus einer anderen Access Datenbank in der Datenbank, in der ich programmiere, in einer Tabelle speichern.

Das ganze soll mit recordsets realisiert werden. Ich will jetzt also meinen recordsetDBextern mit den Daten füllen, die in der externen DB liegen. Die Daten liegen dort jedoch in 2 verschiedenen Tabellen, daher die JOIN Variante.

Wenn recordset.DBextern gefüllt ist, sollen diese Daten mit Hilfe von recordset.DBaktuell in die Zieltabelle der aktuellen Datenbank geschrieben werden.

Hier der bisherige Code:

Sub Einlesen()
Dim dbExtern As DAO.Database
Dim rcsDBextern As DAO.Recordset2
Dim rcsDBaktuell As DAO.Recordset2
Dim dbAktuell As DAO.Database


Set dbAktuell = OpenDatabase("D:\Aktuell\Aktuell.accdb")
Set dbExtern = OpenDatabase("D:\Extern\Extern.mdb")



Set rcsExtern = dbExtern.OpenRecordset("SELECT * FROM TblExt1, TblExt2 WHERE TblExt1.Teilenummer = TblExt2.Teilenummer", dbOpenDynaset)
Set rcsAktuell = dbAktuell.OpenRecordset("tblZieltabelle", dbOpenDynaset)


Do Until rcsExtern.EOF

rcsAktuell.AddNew

rcsAktuell.Fields("Jahr").value = rcsExtern.Fields("JAHR").value
rcsAktuell.Fields("Material Kosten").value = rcsExtern.Fields("MATERIAL_KOSTEN_EUR").value
rcsAktuell.Fields("Montage Kosten").value = rcsExtern.Fields("MONTAGE_KOSTEN_EUR").value
rcsAktuell.Fields("B_NR").value = rcsExtern.Fields("B_NR").value
rcsAktuell.Fields("Teile-NR (eingebaut)").value = rcsExtern.Fields("ET_NR").value
rcsAktuell.Fields("Teile-NR (ausgebaut)").value = rcsExtern.Fields("Teilenummer").value
rcsAktuell.Fields("Teilefamilie").value = rcsExtern.Fields("Teilefamilie").value
rcsAktuell.Fields("Abteilung").value = rcsExtern.Fields("Abteilung").value

rcsAktuell.Update

rcsExtern.MoveNext
Loop

Die letzten beiden Spalten befinden sich in TblExt 2 und werden auch gefunden, lediglich bei der Spalte Teilenummer , die als mein Join Argument gilt, bekomme ich eine Fehlermeldung von meinem VBA Compiler:

"Element in dieser Auflistung nicht gefunden."

Mit folgendem SELECT Befehl ergibt sich der selbe Fehler:

"SELECT * FROM TblExt1 LEFT JOIN TblExt2 ON TblExt1.Teilenummer = TblExt2.Teilenummer"


Ich verstehe nur leider nicht, wieso das so ist...

Vielen Dank für die engagierte Mithilfe bis jetzt!
 
Zuletzt bearbeitet:
Dann ist das vielleicht eine Access-spezifische Eigenart. Ich hab eben mal so einen JOIN in MySQL ausprobiert, und da hat er mir die Join-Argumente mitgeliefert.
 
Schade, aber dann weiß ich zumindest, dass es nicht an dem SQL Statement liegt.

Vielen Dank für die Hilfe.

Dann muss ich mir jetzt etwas anderes überlegen. ;)
 
Ich denke das Problem wird sein, dass die Spalte nicht eindeutig identifiziert werden kann, da die Spalte "Teilenummer" in beiden Tabellen vorkommt.
Ich kenne mich mit VBA und Access nicht sonderlich gut aus, aber du könntest ja mal versuchen die Spalte mit TblExt1.Teilenummer anzusprechen:

rcsAktuell.Fields("Teile-NR (ausgebaut)").value = rcsExtern.Fields("TblExt1.Teilenummer ").value

Oder eben statt * die Spaltennamen angeben (beispielhaft)
"SELECT TblExt1.Teilenummer,
TblExt1.MATERIAL_KOSTEN_EUR,
TblExt2.Abteilung,
TblExt2.xxx
FROM TblExt1 LEFT JOIN TblExt2 ON TblExt1.Teilenummer = TblExt2.Teilenummer

Das müsste doch eigentlich funktionieren.. Ansonsten ist Access einfach Schrott. :rolleyes:
 
@DerZock

BINGO!!!

Die Variante mit dem direkten Ansprechen hat wunderbar funktioniert!

Allerbesten Dank! :)
 
Zurück
Oben