1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

3 Tabellen miteinander verbinden/verknüpfen

Dieses Thema im Forum "DB2" wurde erstellt von Theodoros, 20 November 2019.

  1. Theodoros

    Theodoros Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
    Theodoros gefällt das.
  3. Theodoros

    Theodoros Benutzer

    @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?

     
  4. akretschmer

    akretschmer Datenbank-Guru

    • 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=*#
    
     
  5. Theodoros

    Theodoros Benutzer

    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 ?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    suche mal nach entw.ASTVERZ.SCHLID in (13, 84 164)
     
  7. Theodoros

    Theodoros Benutzer

    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;
     
  8. Theodoros

    Theodoros Benutzer

    @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;
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden