Willkommen bei Entwickler-Forum.
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 30
  1. #1
    Stammgast
    Registriert seit
    09.05.2012
    Beiträge
    135

    Standard Felder aus mehreren Tabellen abfragen

    Hallo,

    ich stehe wieder vor einem Problem und hoffe, dass mir, so wie schon in der Vergangenheit, weitergeholfen wird.

    Ich habe 3 Tabellen mit Nachname, Vorname und Geburtsdatum und Bearbeitungsdatum.
    Jetzt brauche ich eine Abfrage, in der eben diese Felder in einer Zeile, wenn das Bearbeitungsdatum gleich ist, ausgegeben werden.

    Danke

    Code:
    
    create table tab_vn 
    (  Id              NUMBER(10)           not null,
       Vorname         VARCHAR2(60)         not null,
       BearbeitetAm    DATE
    );
    
    
    create table tab_nn 
    (  Id              NUMBER(10)           not null,
       Nachname        VARCHAR2(60)         not null,
       BearbeitetAm    DATE
    );
    
    
    create table tab_GD 
    (  Id            NUMBER(10)           not null,
       GebDat        DATE                 not null,
       BearbeitetAm  DATE
    );
    
    INSERT INTO tab_vn VALUES(  1, 'vorname_01', '01.01.2010' );
    INSERT INTO tab_vn VALUES(  2, 'vorname_02', '01.01.2010' );
    INSERT INTO tab_vn VALUES(  3, 'vorname_03', '02.01.2010' );
    INSERT INTO tab_vn VALUES(  4, 'vorname_04', '02.01.2010' );
    INSERT INTO tab_vn VALUES(  5, 'vorname_05', '03.01.2010' );
    INSERT INTO tab_vn VALUES(  6, 'vorname_06', '03.01.2010' );
    INSERT INTO tab_vn VALUES(  7, 'vorname_07', '04.01.2010' );
    INSERT INTO tab_vn VALUES(  8, 'vorname_08', '04.01.2010' );
    INSERT INTO tab_vn VALUES(  9, 'vorname_09', '05.01.2010' );
    INSERT INTO tab_vn VALUES( 10, 'vorname_10', '05.01.2010' );
    
    
    INSERT INTO tab_nn VALUES(  1, 'nachname_01', '01.01.2010' );
    INSERT INTO tab_nn VALUES(  2, 'nachname_02', '11.01.2010' );
    INSERT INTO tab_nn VALUES(  3, 'nachname_03', '12.01.2010' );
    INSERT INTO tab_nn VALUES(  4, 'nachname_04', '12.01.2010' );
    INSERT INTO tab_nn VALUES(  5, 'nachname_05', '03.01.2010' );
    INSERT INTO tab_nn VALUES(  6, 'nachname_06', '13.01.2010' );
    INSERT INTO tab_nn VALUES(  7, 'nachname_07', '04.01.2010' );
    INSERT INTO tab_nn VALUES(  8, 'nachname_08', '04.01.2010' );
    INSERT INTO tab_nn VALUES(  9, 'nachname_09', '15.01.2010' );
    INSERT INTO tab_nn VALUES( 10, 'nachname_10', '15.01.2010' );
    
    
    INSERT INTO tab_gd VALUES(  1, '01.01.1966', '01.01.2010' );
    INSERT INTO tab_gd VALUES(  2, '01.02.1966', '02.01.2010' );
    INSERT INTO tab_gd VALUES(  3, '01.03.1966', '03.01.2010' );
    INSERT INTO tab_gd VALUES(  4, '01.04.1966', '04.01.2010' );
    INSERT INTO tab_gd VALUES(  5, '01.05.1966', '05.01.2010' );
    INSERT INTO tab_gd VALUES(  6, '01.06.1966', '11.01.2010' );
    INSERT INTO tab_gd VALUES(  7, '01.07.1966', '15.01.2010' );
    INSERT INTO tab_gd VALUES(  8, '01.08.1966', '20.01.2010' );
    
    /* Ergebnis
    
    select nachname, vorname, gebdat, BearbeitetAm 
    
    nachname_01,vorname_01,01.01.1966,01.01.2010
    nachname_01,vorname_02,          ,01.01.2010
               ,vorname_03,01.02.1966,02.01.2010
               ,vorname_04,          ,02.01.2010
    nachname_05,vorname_05,01.03.1966,03.01.2010
    nachname_05,vorname_06,          ,03.01.2010
    nachname_07,vorname_07,          ,04.01.2010
    nachname_07,vorname_08,01.04.1966,04.01.2010
    nachname_08,vorname_07,          ,04.01.2010
    nachname_08,vorname_08,          ,04.01.2010
               ,vorname_09,          ,05.01.2010
               ,vorname_10,01.05.1966,05.01.2010
    nachname_02,          ,01.06.1966,11.01.2010
    nachname_03,          ,          ,12.01.2010
    nachname_04,          ,          ,12.01.2010
    nachname_06,          ,          ,13.01.2010
    nachname_09,          ,01.07.1966,15.01.2010
    nachname_10,          ,          ,15.01.2010
               ,          ,01.08.1966,20.01.2010      
     
    
    */
    
    

  2. #2
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.171

    Standard

    Versuch es mit

    select Vorname, Nachname, GebDat from tab_vn,tab_nn,tab_GD where
    tab_nn.id=tab_vn.id and
    tab_nn.id=tab_GD.id and
    tab_nn.BearbeitetAm=tab_vn.BearbeitetAm and
    tab_nn.BearbeitetAm=tab_GD.BearbeitetAm
    Christian

  3. #3
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.261

    Standard

    Die Anforderung hätte ich jetzt eher so verstanden
    Code:
    select v.Vorname, v.Nachname, v.GebDat,
           n.Vorname, n.Nachname, n.GebDat,
           g.Vorname, g.Nachname, g.GebDat
      from tab_vn v, tab_nn n, tab_GD g
     where n.BearbeitetAm = v.BearbeitetAm
       and n.BearbeitetAm = g.BearbeitetAm
    Gruß, defo

  4. #4
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.171

    Standard

    Naja in tab_vn git es keinen Nachnamen oder Geburtsdatum...nur den Vornamen. Ebenso in tab_nn und tab_GD
    Christian

  5. #5
    Stammgast
    Registriert seit
    09.05.2012
    Beiträge
    135

    Standard

    Zitat Zitat von Christian Marquardt Beitrag anzeigen
    Versuch es mit

    select Vorname, Nachname, GebDat from tab_vn,tab_nn,tab_GD where
    tab_nn.id=tab_vn.id and
    tab_nn.id=tab_GD.id and
    tab_nn.BearbeitetAm=tab_vn.BearbeitetAm and
    tab_nn.BearbeitetAm=tab_GD.BearbeitetAm

    Hallo Christian,

    leider nicht ganz, es kommt nur ein Satz zurück.

    VORNAME NACHNAME GEBDAT
    ------------------------------------------------------------ ------------------------------------------------------------ ---------------------------------
    vorname_01 nachname_01 01.01.1966

  6. #6
    Stammgast
    Registriert seit
    09.05.2012
    Beiträge
    135

    Standard

    Hallo defo,

    es gibt in jeder Tabelle nur eines der Felder, lediglich das BearbeitetAm ist in allen enthalten.

    vg

  7. #7
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.171

    Standard

    Ja, den schon beim Datensatz Nr. 2 stimmte das Bearbeitungsdatum in allen 3 Tabellen nicht mehr überein.
    Insofern ist die Anforderung "wenn das Bearbeitungsdatum gleich ist" nicht mehr gegeben.

    Grundsätzlich:
    Tabellen joinen
    from tab_vn,tab_nn,tab_GD

    Die zusammengehörenden Datensätze finden, davon ausgehend, dass die Nachnamentabelle die führende ist
    tab_nn.id=tab_vn.id and
    tab_nn.id=tab_GD.id and

    Jetzt muss geklärt werden, wo das Datum gleich sein soll
    Christian

  8. #8
    Stammgast
    Registriert seit
    09.05.2012
    Beiträge
    135

    Standard

    Hallo Christian,

    es sollen alle Datensätze ausgegeben werden, ungeachtet dessen ob in anderen Tabellen ein solches Datum vorhanden ist. Wenn das Datum gleich ist, dann soll das in einem Satz ausgegeben werden.
    Siehe meinen 1. Beitrag ganz unten unter Ergebnis

    Danke

  9. #9
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.171

    Standard

    Sorry, dass verstehe ich nicht
    es sollen alle Datensätze ausgegeben werden, ungeachtet dessen ob in anderen Tabellen ein solches Datum vorhanden ist.
    select Vorname, Nachname, GebDat from tab_vn,tab_nn,tab_GD where
    tab_nn.id=tab_vn.id and
    tab_nn.id=tab_GD.id

    Wenn das Datum gleich ist, dann soll das in einem Satz ausgegeben werden.
    Welches Datum soll mit welchem gleich sein bei 3 Tabellen? Oder egal welche Tabelle -> Hauptsache eins ist gleich?
    Welches ist die führende Tabelle?
    Christian

  10. #10
    Stammgast
    Registriert seit
    09.05.2012
    Beiträge
    135

    Standard

    Jede Tabelle hat 10 Datensätze. Wenn kein Bearbeitungsdatum gleich sein würde, soll die Abfrage alle 30 Datensätze ausgeben. Sobald in 2 oder 3 der Tabellen das Bearbeitsungsdatum gleich ist, soll dafür nur ein Datensatz ausgegeben werden:
    Code:
    nachname_01,vorname_01,01.01.1966,01.01.2010
    nachname_01,vorname_02,          ,01.01.2010
    
               ,vorname_03,01.02.1966,02.01.2010
               ,vorname_04,          ,02.01.2010
    
    nachname_05,vorname_05,01.03.1966,03.01.2010

 

 
Seite 1 von 3 1 2 3 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •