Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage mit inner Join - Syntaxfehler (https://www.delphipraxis.net/62118-sql-abfrage-mit-inner-join-syntaxfehler.html)

Susanne 31. Jan 2006 09:33

Datenbank: MS Access • Version: 2003 • Zugriff über: ADO

SQL-Abfrage mit inner Join - Syntaxfehler
 
Ich versuche eine Abfrage auf eine SQL-Tabelle zu machen, aber irgendwie komme ich da nicht so recht weiter.

Die SQL-Abfrage so wie sie dort unten steht, soll angeblich funktioniert haben, aber bei mir gibt es eine Fehlermeldung, wenn ich versuche diese Abfrage auf eine Access-Datenbank abzusetzen. Ich habe mir das ganze in Access nachgebaut, jeweils eine Tabelle beleg, konto und buchung. Später soll es auf einem SQL-Server laufen.


SQL-Code:
select beleg.internebelegnummer, beleg.belegdatum, konto.kontonummer, konto.bezeichnung from beleg inner join buchung on beleg.dvbelegnummer=buchung.dvbelegnummer inner join konto on buchung.dvkontonummer = konto.dvkontonummer and where konto.klasse = 'K'
Fehlermeldung:
Synataxfehler (fehlender Operator)
SQL-Code:
'beleg.dvbelegnummer=buchung.dvbelegnummer inner join konto on buchung.dvkontonummer = konto.dvkontonummer'
Kann mir vielleicht bei der Gelegenheit nochmal einer das mit dem inner join erklären, das ist mir nicht wirklich klar.

vielen Dank.

Grüsse
Susanne

tomsel 31. Jan 2006 09:41

Re: SQL-Abfrage mit inner Join - Syntaxfehler
 
bei
SQL-Code:
and where
musst du dich für eins von beiden entscheiden :wink:

Susanne 31. Jan 2006 09:46

Re: SQL-Abfrage mit inner Join - Syntaxfehler
 
jetzt habe ich das and weggelassen, aber die Fehlermeldung ist die gleiche. kann man das ganze statement auch ohne die ganzen inner join irgendwie formulieren, naja, das Ergebnisse sollte natürlich das gleiche bleiben :-) die inner join sind mir ein bisschen suspect.

tomsel 31. Jan 2006 10:06

Re: SQL-Abfrage mit inner Join - Syntaxfehler
 
Deine Inner Joins kannst du durch einen einfachen Verbund ersetzen:

SQL-Code:
select beleg.internebelegnummer, beleg.belegdatum, konto.kontonummer, konto.bezeichnung from beleg, buchung, konto where beleg.dvbelegnummer=buchung.dvbelegnummer and konto.dvkontonummer=buchung.dvkontonummer and konto.klasse = "K"
Außerdem: In Access muss man imho doppelte Anführungszeichen benutzen. Edit: Nee, aber man kann :stupid:

sir-archimedes 31. Jan 2006 10:10

Re: SQL-Abfrage mit inner Join - Syntaxfehler
 
Du kannst das natürlich auch ohne INNER JOINs machen. Circa so:

SQL-Code:
  SELECT
     beleg.internebelegnummer,
     beleg.belegdatum,
     konto.kontonummer,
     konto.bezeichnung
  FROM
     beleg, buchung, konto
  WHERE
     beleg.dvbelegnummer=buchung.dvbelegnummer AND
     buchung.dvkontonummer = konto.dvkontonummer AND
     konto.klasse = 'K'
Das macht genau das gleiche, wie ein INNER JOIN. Trotzdem finde ich die Schreibweise mit Inner Joins schöner - wenn man sich erst mal dran gewöhnt hat ;-)

Ich würde evtl. mal versuchen, das ganze zu Klammern. In etwa so:

SQL-Code:
  SELECT
     beleg.internebelegnummer,
     beleg.belegdatum,
     konto.kontonummer,
     konto.bezeichnung
  FROM
     (beleg INNER JOIN buchung ON beleg.dvbelegnummer=buchung.dvbelegnummer)
            INNER JOIN konto ON buchung.dvkontonummer = konto.dvkontonummer
  WHERE
     konto.klasse = 'K'
Habe gerade kein Excel zur Hand, um das zu testen. Auf dem MS-SQL-Server gehen solche Joins auf jeden Fall auch ohne Klammerung.

Gruß,

alzaimar 31. Jan 2006 10:19

Re: SQL-Abfrage mit inner Join - Syntaxfehler
 
Zitat:

Zitat von dominik.boehm
Das macht genau das gleiche, wie ein INNER JOIN. Trotzdem finde ich die Schreibweise mit Inner Joins schöner...

Mit 'schöner' (obwohl es stimmt) hat das aber Nichts zu tun. Microsoft behält sich vor, die alte Schreibweise irgendwann nicht mehr zu supporten. Weiterhin gibt es Konstrukte, die lassen sich nunmal nur über die JOIN-Schreibweise realisieren. Insofern ist es auf jeden Fall zu empfehlen, ausschließlich mit JOINs zu arbeiten, dann hat man einfach weniger Probleme.

marabu 31. Jan 2006 10:33

Re: SQL-Abfrage mit inner Join - Syntaxfehler
 
Die Jet-SQL Syntax kennt im Gegensatz zu Transact-SQL kein kaskadierendes INNER JOIN - deshalb sind die von Dominik erwähnten Klammern dort zwingend.

Grüße vom marabu


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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz