MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 08.05.2019, 10:04   #1
stephie258
Neuer Benutzer
Neuer Benutzer
Standard T-SQL : MSSQL 2016 - Synthaxfehler Inner Join

Hallo zusammen,

ich habe ein Problem bei der Verwendung von INNER JOIN und komme mit Google nicht mehr weiter.

Hintergrund-Info:
Ich habe eine Exceltabelle, die ich in Access importiere (heißt dann "R3000neu") und dann dort die Inhalte in einzelne Tabellen aufspalte. Diese Prozedur muss regelmäßig erfolgen.

Es gibt also die Quelltabelle [R3000neu], in der alle Infos enthalten sind, sowie die Tabellen tbl_Eigentümer und tbl_Portfolio, in die im ersten Schritt schon alle Eigentümer bzw. Portfolio-Namen erfasst und mit einer ID versehen wurden. Die "WI-Namen" sollen nun in einer weiteren Tabelle [tbl_Objekt] erfasst und jeweils die IDs der Eigentümer bzw. Portfolien ergänzt werden - aber nur, wenn sie noch nicht vorhanden sind.

(Testweise lasse ich mir die Ergebnisse erst anzeigen, daher SELECT INTO Test-Tabelle)

Code:

SELECT tbl_Eigentümer.[ID_Eigentümer], R3000neu .[WI-Namen], tbl_Portfolio.[ID_Portfolio] INTO tbl_Test

FROM R3000neu 
INNER JOIN tbl_Eigentümer ON R3000neu.[Eigentümer] = tbl_Eigentümer.[Eigentümer]
INNER JOIN tbl_Portfolio ON R3000neu.[Portfolio] = tbl_Portfolio.[Portfolio]

WHERE R3000neu.[WI-Namen] NOT IN (SELECT DISTINCT [WI-Namen] FROM tbl_Objekt)

GROUP BY tbl_Eigentümer.[ID_Eigentümer], tbl_Portfolio.[ID_Portfolio]
Führe ich den Code aus, kommt die Fehlermeldung "Syntaxfehler (fehlender Operator) in Abfrageausdruck 'R3000neu.[Eigentümer] =tbl_Eigentümer.[Eigentümer] [...]"

Ich verstehe nicht, welcher Operator gemeint ist. Google hat konnte mir leider auch nicht weiterhelfen. Wenn ich die zweite Zeile "INNER JOIN tbl_Portfolio …" lösche (und die zugehörigen Argumente in der ersten und letzten Zeile), dann funktioniert es. Muss ich hier irgendwo Klammern setzen? Und wenn ja, warum? Das erschließt sich mir nicht.

Für hilfreiche Hinweise wäre ich sehr dankbar!

LG
Stephie
stephie258 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.05.2019, 13:38   #2
hcscherzer
MOF Guru
MOF Guru
Standard

Moin Stephie. Willkommen hier im Forum.

Zuallererst sind mir die Umlaute ins Auge gesprungen.
Könntest Du die vermeiden und insofern als Fehlerquelle ausschliessen?

Dann gibt es das Feld R3000neu .[WI-Namen] als Ausgabespalte.
Da ist das Leerzeichen seltsam.
Und dann ist das nicht in der Liste der Felder nach denen gruppiert wird und es wird auch keine Aggregatfunktion darauf angewendet.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.05.2019, 14:24   #3
stephie258
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Hans-Christian,

vielen Dank für den Hinweis! Die Umlaute habe ich ersetzt. Das Leerzeichen ist raus. Tatsächlich habe ich beim Gruppieren ein Argument vergessen. Aber selbst wenn ich das noch ergänze, bleibt die Fehlermeldung die gleiche.

Code:

SELECT tbl_Eigentuemer.[ID_Eigentuemer], R3000neu.[WI-Namen], tbl_Portfolio.[ID_Portfolio] INTO tbl_Test

FROM R3000neu
INNER JOIN tbl_Eigentuemer ON R3000neu.[Eigentuemer] = tbl_Eigentuemer.[Eigentuemer]
INNER JOIN tbl_Portfolio ON R3000neu.[Portfolio] = tbl_Portfolio.[Portfolio]

WHERE R3000neu.[WI-Namen] NOT IN (SELECT DISTINCT [WI-Namen] FROM tbl_Objekt)

GROUP BY tbl_Eigentuemer.[ID_Eigentuemer], R3000neu.[WI-Namen],  tbl_Portfolio.[ID_Portfolio]
Habe ich nur einen INNER JOIN funktioniert es dagegen einwandfrei.

Vielleicht hier nochmal meine Tabellen und was ich raushaben will:

R3000neu als Quelltabelle
Eigentuemer, Portfolio, WI-Namen, ……….

Diese Quelltabelle wird aufgeschlüsselt in die folgenden beiden Tabellen:
tbl_Eigentuemer
ID_Eigentuemer [PS], Eigentuemer

tbl_Portfolio
ID_Portfolio [PS], Portfolio

Und nun soll ebenfalls aus der Quelltabelle aber mit den Fremdschlüsseln aus den beiden anderen folgende neue Tabelle erstellt werden:
tbl_Objekt
ID_Objekt [PS], WI-Namen, ID_Eigentuemer [FS], ID_Portfolio [FS]



Herzlichen Dank vorab!

LG
Stephie
stephie258 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.05.2019, 17:20   #4
hcscherzer
MOF Guru
MOF Guru
Standard

Wir sind ja hier in der SQL Abteilung des Forums.
In der Titelzeile wird sich auf T-SQL bezogen.

Wird diese Abfrage im Management-Studio ausgeführt?

Oder könnte es vielleicht sein, dass das aus einer Access-FrontEnd-DB stammt, in der die MSSQL Tabellen verknüpft sind? In Jet-SQL (das hier zur Anwendung kommt) werden mehrfache JOINs etwas anders dargestellt - mit Klammern.
Code:

FROM R3000neu
INNER JOIN (tbl_Eigentuemer INNER JOIN tbl_Portfolio
  ON R3000neu.[Portfolio] = tbl_Portfolio.[Portfolio])
ON R3000neu.[Eigentuemer] = tbl_Eigentuemer.[Eigentuemer]

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (08.05.2019 um 17:28 Uhr).
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.05.2019, 07:06   #5
stephie258
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Oha, Entschuldigung, da kommt meine Unwissenheit zum Vorschein. Mit Access und SQL beschäftige ich mich seit etwa 4 Tagen, daher war mir nicht bewusst, was ich richtigerweise in der Titelzeile angeben muss.

Ich gehe so vor, dass ich mir im Access eine Abfrage mit der angebotenen benutzerfreundlichen Oberfläche baue, mir diese als SQL anzeigen lasse und dann diesen SQL-Code in VBA übertrage (strSQL= "..." DoDmd.RunSQL strSQL).
Nur das, was ich jetzt hier vorhabe, bekomme ich in dieser Oberfläche nicht dargestellt und versuche daher selbst den SQL-Code zu basteln.

Deine angebotene Lösung habe ich ausprobiert. Das WHERE und GROUP BY danach habe ich erstmal rausgenommen, aber das SELECT INTO davor stehen lassen. Jetzt kommt die Fehlermeldung "Syntaxfehler in JOIN-Operation."
stephie258 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.05.2019, 08:34   #6
hcscherzer
MOF Guru
MOF Guru
Standard

Sorry, das mit den Klammern habe ich auch nur einfach aus der Luft gegriffen, da ich ja keine Kenntnis Deiner Datenstrukturen habe.

Wenn Du die Abfrage im Entwurfsfenster von Access zusammenstellst, dann kannst Du Dir diese Klammer-Geschichte anschliessend in der SQL Ansicht betrachten.
Drei Datenquellen mit zwei JOINs sollte das Entwurfsfenster eigentlich verkraften.

Zitat:

DoDmd.RunSQL strSQL

Hier würde ich stattdessen empfehlen:
Code:

currentdb.execute strSQL, dbfailonerror

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.05.2019, 11:46   #7
stephie258
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hmm nein. Mein Problem war der Syntaxfehler beim INNER JOIN in SQL nicht das VBA. Und im Entwurfsfenster habe ich die Abfrage eben nicht so dargestellt bekommen, wie ich das wollte. Daher habe ich den SQL-Code selbst gebastelt.

Die Lösung des Problems lautet nun wie folgt:
Offensichtlich braucht ACCESS Klammern ab dem zweiten INNER JOIN. Also schreibt man dann

Code:

SELECT bla
FROM (((Tab1
INNER JOIN Tab2 ON ….. )
INNER JOIN Tab3 ON ….. )
INNER JOIN Tab4 ON ….. )
INNER JOIN Tab5 ON …..
Keine Klammer um den letzten! Sieht komisch aus, muss aber so!
stephie258 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.