Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme mit INNER JOIN

Empfohlene Antworten

Veröffentlicht

:confused: Ich habe ein Problem mit INNER JOINs und weiß nicht mehr weiter.

Es läuft einfach nicht. Wahrscheinlich habe ich da irgendwo einen Klammerfehler, aber ich bin ehrlich gesagt, auch nicht so wirklich fit mit hoher SQL.

Kann mir jemand da weiterhelfen?:confused:


select *
FROM tab_buchungskreis E INNER JOIN tab_lieferschein C
(
INNER JOIN tab_packstueck D
(
INNER JOIN tab_versandart v
(
INNER JOIN tab_frachtfuehrer f ON v.lfd_nr_Tab_frachtfuehrer = f.lfd_nr_Tab_frachtfuehrer
)
ON D.IST_LFD_NR_TAB_VSA = v.LFD_NR_TAB_VERSANDART
) ON D.lfd_nr_Tab_lieferschein = C.lfd_nr_Tab_lieferschein
)
ON C.LFD_NR_TAB_BUCHUNGSKREIS = E.LFD_NR_TAB_BUCHUNGSKREIS
WHERE
AND (F.LFD_NR_TAB_FRACHTFUEHRER = ('104'))
AND (C.LIEFERSCHEIN_DATUM BETWEEN to_date('04.09.2002','DD.MM.YYYY') AND to_date('04.09.2002','DD.MM.YYYY'))
AND (D.RETURN_CODE = ('1'))
[/PHP]

P.S. Es handelt sich um eine Oracle-Datenbank, falls das wichtig sein sollte.

Wo genau liegt den das Problem ? Wenn etwas nicht Funktioniert kann eine Exception sehr hilfreich sein.

Einen Fehler bei der Benennung der Tabellen und Spalten halte ich für nicht möglich.

Der Fehlercode ist: "ORA-00933: SQL command no proberbly ended".

Also, bei Oracle kann man meiner Meinung nach leider nicht mit dieser Syntax arbeiten. Anstelle von INNER JOIN kannst du einfach die entsprechenden Tabellenspalten gleich setzen.

select E.*

from tab_buchungskreis E

, tab_lieferschein C

, tab_packstueck D

, tab_versandart v

, tab_fracht_fuehrer f

where v.lfd_nr_Tab_frachtfuehrer = f.lfd_nr_Tab_frachtfuehrer

and D.IST_LFD_NR_TAB_VSA = v.LFD_NR_TAB_VERSANDART

and D.lfd_nr_Tab_lieferschein = C.lfd_nr_Tab_lieferschein

and C.LFD_NR_TAB_BUCHUNGSKREIS = E.LFD_NR_TAB_BUCHUNGSKREIS

and F.LFD_NR_TAB_FRACHTFUEHRER = '104'

and C.LIEFERSCHEIN_DATUM BETWEEN (C.LIEFERSCHEIN_DATUM BETWEEN to_date('04.09.2002','DD.MM.YYYY') AND to_date('04.09.2002','DD.MM.YYYY'))

AND (D.RETURN_CODE = ('1'))

SO müsste es klappen...(wenn ich das mit dem INNER JOIN richtig verstanden hab)

Aber gleichsetzen ist so verdammt lahm.

Ich habe immer gedacht Oracle wäre so gut....

Original geschrieben von themaster

select *

...

WHERE

AND (F.LFD_NR_TAB_FRACHTFUEHRER = ('104'))

...

kann es sein das da der Fehler liegt, das AND direkt nach dem WHERE ? Denn mit den verschachtelten Joins sollte doch eigentlich kein Problem sein bei Oracle (schliesslich schafft sogar Access das ;)) ?

gruß

Christian

Original geschrieben von tauron

kann es sein das da der Fehler liegt, das AND direkt nach dem WHERE ? Denn mit den verschachtelten Joins sollte doch eigentlich kein Problem sein bei Oracle (schliesslich schafft sogar Access das ;)) ?

gruß

Christian

Nein, daran lag es nicht. Das ist mir später auch aufgefallen und habe es ohne das fehlerhaft AND probiert, das gleiche Ergebnis, der gleiche Fehler.

Access, MSSQL, mySQL usw. können das alle. INNER JOIN sind ja auch IMHO SQL-Standard. Aber nicht Oracle.

Ich darf jetzt bei Oracle einige Minuten für die Ausführung der Abfrage warten, bei der gleichen Abfrage (mit inner joins) von Access heraus, ging es in weniger als einer Minute (mit den gleichen Datentabellen).

Bis einschließlich Oracle8i gibt es den JOIN-Syntax nicht unter Oracle. Die Oracle-Variante mit der WHERE-Bedingung sollte bei einer "guten" DB-Konfiguration und vor allem korrekt gewählten Indices (insbesondere für die Fremdschlüssel) mindestens genauso schnell sein wie Access. Diese Relation ist abhängig vom Datenvolumen. Bei 100 DS an einem schnellen Desktop-Arbeitsplatz wird Access natürlich schneller sein :)

Wenns interssiert: Lt. Oracle wird mit der 9er-Version der DB der JOIN-Syntax als Zusatz unterstützt. (nach ANSI/ISO SQL99)

Oracle Technet News

AND (C.LIEFERSCHEIN_DATUM BETWEEN to_date('04.09.2002','DD.MM.YYYY') AND to_date('04.09.2002','DD.MM.YYYY'))

imho liegt der fehler genau hier

AND(xxx(yyy) AND

da steigt er aus, weil eine klammer zu wenig, auch wenn du sie nach dem nächsten AND wieder schliesst

greets

flo

Original geschrieben von Darth_Zeus

imho liegt der fehler genau hier

AND(xxx(yyy) AND

da steigt er aus, weil eine klammer zu wenig, auch wenn du sie nach dem nächsten AND wieder schliesst

greets

flo

Die BETWEEN-Syntax ist schön korrekt. Wieso auch nicht alle Klammern werden wieder ordentlich geschlossen.

Wie schon festegestellt ist das Problem, das Oracle 8 zwar Java untetstützt, aber nicht vollständig den SQL-Standard. :(

Danke für all die Hilfe, aber ich habe es nun wieder auf ganz viele WHERE-Gleichsetzungen umgestellt.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.