3 Tabellen miteinander verbinden/verknüpfen

Theodoros

Benutzer
Beiträge
5
Hallo zusammen,

ich hätte eine Frage bezüglich DB2. Ich muss 3 Tabellen miteinander verbinden und soll einen SQL Befehl erstellen. Es müssen manuelle Zahlungen, die in einer Orgeinheit(Organisationseinheit) nicht gelistet sind, gefunden werden. Ich habe folgenden SQL erstellt, wobei dieser nicht stimmt. Deswegen wollte ich euch fragen, ob ihr mir da weiterhelfen könntet? Danke im Voraus.



select ORGEINHEIT

FROM entw.V0ZV0081 (Tabellenname1)

INNER JOIN entw.AE00401 (Tabellenname2)

ON entw.AE00401.BEZID = entw.ASTVERZ.SCHLID (die 3 Tabelle ist ASTVERZ)

ORDER BY ORGEINHEIT with ur;

Folgende Fehlermeldung kommt raus:
1) [Code: -206, SQL State: 42703] ENTW.ASTVERZ.SCHLID IS NOT VALID IN THE CONTEXT WHERE IT IS USED. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.22.29
2) [Code: -514, SQL State: 26501] THE CURSOR SQL_CURLH200C1 IS NOT IN A PREPARED STATE. SQLCODE=-514, SQLSTATE=26501, DRIVER=4.22.29
 
Werbung:
wenn Du zwei Tabellen, nennen wir sie mal A und B, joinst, dann muß in die JOIN-Bedingung rein, über welche Spalten dieser 2 Tabellen der JOIN erfolgen soll. Bei ist das aber A.spalte = C.spalte.
Wenn Du 3 Tabellen joinen willst, braucht Du 2 JOIN-Befehle.
 
@akretschmer danke dir. Ich habe jetzt erst mal nur 2 Tabellen kombiniert jetzt stimmt der SQL zwar, aber es kommen keine Daten raus:

Mein SQL Befehl sieht jetzt so aus:


select t1.WAEHRUNG,t2.KURZTEXT,t1.ORGEINHEIT,t2.KURZTEXT,t1.ZTYP,t2.KURZTEXT, t1. *, t2. *, t1. *, t2. *, t1. *, t2. *


FROM entw.V0ZV0081 t1

JOIN entw.ASTVERZ t2

ON entw.V0ZV0081.WAEHRUNG = entw.ASTVERZ.AUSPRID AND entw.ASTVERZ.SCHLID = 13


JOIN entw.ASTVERZ t2

ON entw.V0ZV0081.ORGEINHEIT = entw.ASTVERZ.AUSPRID AND entw.ASTVERZ.SCHLID = 165

JOIN entw.ASTVERZ t2

ON entw.V0ZV0081.ZTYP = entw.ASTVERZ.AUSPRID AND entw.ASTVERZ.SCHLID = 84

WHERE entw.V0ZV0081.WERT = '01.01.2019'

Der Befehl wird ausgegeben aber es kommen keine Daten raus, liegt das daran das alle Schlüssel 13,165 und 84 gleich heißen?

 
  • warum in der Select-Liste t1. *, t2. *, t1. *, t2. *, t1. *, t2. *? Also, warum die Leerzeichen zwischen t1. *, und warum so oft dasselbe?
  • wenn Du Aliase vergibst, sind die Tabellen nur noch unter dem Alias ansprechbar. Deine JOIN-Condition ist also nicht auflösbar

Code:
test=*# select * from foo where foo.i = 1;
 i
---
 1
(1 row)

test=*# select * from foo f where foo.i = 1;
FEHLER:  ungültiger Verweis auf FROM-Klausel-Eintrag für Tabelle »foo«
LINE 1: select * from foo f where foo.i = 1;
                                  ^
HINT:  Vielleicht wurde beabsichtigt, auf den Tabellenalias »f« zu verweisen.
test=*# select * from foo f where f.i = 1;
 i
---
 1
(1 row)

test=*#
 
Ich soll einen SQL Befehl erstellen indem

WÄHRUNG KURZTEXT ORGEINHEIT KURZTEXT ZTYP KURZTEXT
Nebeneinander stehen, deswegen habe ich die select Liste so erstellt. Spielt es eine Rolle wenn da ein Leerzeichen zu viel ist ?
 
Ok ich hab den Fehler gefunden. Ich musste die Tabellen mit t1,t2,t3 und t4 bezeichnen und diese in den JOIN und ON Bedingungen abändern, weil so wie ich es geschrieben habe, waren alle 3 Join Bedingungen auf den gleichen Namen bezogen.

In der Tabelle V0ZV0081 sind alle manuellen Zahlungen drinne. Ich muss jetzt alle Zahlungen die in der Spalte ORGEINHEIT nicht gelistet sind finden. Das muss ich mit einem Subselect machen, aber ich weiß nicht ganz genau wie man Zahlungen die nicht gelistet sind wieder gefunden werden können.

So sieht mein SQL aus, aber ich weiß nicht was für man für einen Befehl geben soll, damit die "nicht gelisteten" ORGEINHEITEN gezeigt bzw. gefunden werden


SELECT


ORGEINHEIT

FROM

entw.V0ZV0081

WHERE

ORGEINHEIT IN (

SELECT


ORGEINHEIT

FROM


entw.V0ZV0081

WHERE



ORGEINHEIT != 0



) with ur;
 
Werbung:
@akretschmer Ok ich hab den Fehler gefunden. Ich musste die Tabellen mit t1,t2,t3 und t4 bezeichnen und diese in den JOIN und ON Bedingungen abändern, weil so wie ich es geschrieben habe, waren alle 3 Join Bedingungen auf den gleichen Namen bezogen.

In der Tabelle V0ZV0081 sind alle manuellen Zahlungen drinne. Ich muss jetzt alle Zahlungen die in der Spalte ORGEINHEIT nicht gelistet sind finden. Das muss ich mit einem Subselect machen, aber ich weiß nicht ganz genau wie man Zahlungen die nicht gelistet sind wieder gefunden werden können. Ich muss alle 3 Tabellen miteinander verbinden, das heißt V0ZV0081 (View zu den manuelle Zahlungen), ASTVERZ (Schlüsselverzeichnis) und AE00401 (Beziehungen), wobei mir gesagt wurde, dass die AE00401 mit einem Subselect gemacht werden muss.

So sieht mein SQL aus, aber ich weiß nicht was für man für einen Befehl geben soll, damit die "nicht gelisteten" ORGEINHEITEN gezeigt bzw. gefunden werden


select ORGEINHEIT

FROM entw.V0ZV0081

JOIN entw.ASTVERZ

ON entw.V0ZV0081.ORGEINHEIT = entw.ASTVERZ.AUSPRID AND entw.ASTVERZ.SCHLID = 165

JOIN entw.AE00401

ON entw.ASTVERZ.

WHERE

BEZID IN (

select


BEZID

from


entw.AE00401

where


BEZID = 1812

) with ur;
 
Zurück
Oben