Anzeige:
Ergebnis 1 bis 7 von 7

Thema: SQL-Abfrage

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.09.2006
    Ort
    FFM
    Beiträge
    15

    SQL-Abfrage

    Hallo..
    ich soll eine vorhandene SQL-Abfrage, die auf eine Oracle-Datenbank zugreift, umschreiben, so dass sie auf eine Access-Datenbank zugreifen kann.

    Kann mir jemand helfen, wie ich folgenden Befehl übertrage???
    t.portfoliotypeid (+) = p.portfoliotypeid

    Kenne dieses (+)= leider nicht.. Angeblich sollen dadurch aber alle Daten aus der ersten und nur die passenden aus der zweiten Spalte geliefert werden..

    Vielen Dank!!! Gruss,
    DUDE

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.09.2006
    Ort
    FFM
    Beiträge
    15
    Ich möchte meine Frage nocheinmal ein wenig präzisieren.. Habe nämlich mitlerweile herausgefunden, dass dieses (+)= in Access LEFT JOIN oder RIGHT JOIN entspricht.
    Habe es auch schon geschafft 2 Tabellen miteinander zuverknüpfen.. Bei mehreren bekomme ich allerdings wieder schwierigkeiten:

    SELECT r.*, at.aggregationtype, rt.reporttype, t.risktype
    FROM agg_info_report_config r
    , agg_meta_aggregationtypes at
    , agg_meta_reporttypes rt
    , agg_meta_risktypes t
    WHERE r.validfrom <= Format(REFERENCEDATE,'Short Date')
    AND r.validto > Format(REFERENCEDATE,'Short Date')
    AND at.aggregationtypeid (+) = r.aggregationtypeid
    AND rt.reporttypeid (+) = r.reportid
    AND t.risktypeid (+) = r.risktypeid

    Diese Abfrage möchte ich umschreiben und habe es folgendermaßen versucht:

    SELECT r.*, at.aggregationtype, rt.reporttype, t.risktype
    FROM agg_meta_aggregationtypes at,
    agg_meta_reporttypes rt,
    agg_meta_risktypes t LEFT JOIN agg_info_report_config r
    ON( r.validfrom <= Format(REFERENCEDATE,'Short Date')
    AND r.validto > Format(REFERENCEDATE,'Short Date')
    AND at.aggregationtypeid = r.aggregationtypeid
    AND rt.reporttypeid = r.reportid
    AND t.risktypeid = r.risktypeid)

    Allerdings bekomme ich eine Fehlermeldung, dass ich JOIN falsch benutzt habe..
    Bitte um HILFE

    Gruss und DANKE,
    DUDE

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.09.2006
    Ort
    FFM
    Beiträge
    15
    habs noch weiter verbessert, aber noch immer einen fehler irgendwo...

    SELECT r.*, at.aggregationtype, rt.reporttype, t.risktype
    FROM agg_info_report_config r
    RIGHT JOIN agg_meta_aggregationstypes at on at.aggregationtypeid = r.aggregationtypeid
    RIGHT JOIN agg_meta_reporttypes rt on rt.reporttypeid = r.reportid
    RIGHT JOIN agg_meta_risktypes t on t.risktypeid = r.risktypeid
    WHERE r.validfrom <= Format(REFERENCEDATE,'Short Date')
    AND r.validto > Format(REFERENCEDATE,'Short Date')

    Folgende Fehlermeldung wird ausgegeben:
    [ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'at.aggregationtypeid = r.aggregationtypeid LEFT JOIN agg_meta_reporttypes rt on rt.reporttypeid = r.reportid LEFT JOIN agg_meta_risktypes t on t.risktypeid = r.risktypeid'."
    Geändert von Dude193 (04-10-2006 um 15:01 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    28.09.2006
    Ort
    FFM
    Beiträge
    15
    soo.. und am ende des Tages noch die richtige Lösung..

    habs endlich geschafft *freu*

    SELECT r.*, at.aggregationtype, rt.reporttype, t.risktype
    FROM ((agg_info_report_config r LEFT JOIN agg_meta_reporttypes rt
    ON r.[REPORTID] =rt.[REPORTTYPEID]) LEFT JOIN agg_meta_risktypes t
    ON r.[RISKTYPEID] =t.[RISKTYPEID]) LEFT JOIN agg_meta_aggregationtypes at
    ON r.[AGGREGATIONTYPEID] =at.[AGGREGATIONTYPEID]
    WHERE r.validfrom <= Format(REFERENCEDATE,'Short Date')
    AND r.validto > Format(REFERENCEDATE,'Short Date');

  5. #5
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Schön, dass wir helfen konnten :
    Das Ziel ist das Ziel.

  6. #6
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Das (+) in Oracle meint nen OUTER JOIN, du machst aber INNER JOINs (das Schlüsselwort INNER ist optional, d. h. INNER JOIN ist equivalent zu JOIN (ohne irgendwas davor), es sei denn Access verhält sich dahingehen abweichen von Standard, was ich aber diesbzgl. nicht glaube)!
    Folgende Oracle-Query
    Code:
    SELECT a.x,
           b.y
           FROM a,
                b
           WHERE a.z = b.z(+);
    ist also equivalent zur folgenden Standard-Query
    Code:
    SELECT a.x,
           b.y
           FROM a
                LEFT OUTER JOIN b
                                ON a.z = b.z;
    .
    Also ohne den Query sonst im Detail angesehn zu haben, es kann passieren, dass deine Lösung andere Ergebnisse liefert als der ursprüngliche Query, bei gleichen Daten, versteht sich.
    chmod -R +t /*

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.09.2006
    Ort
    FFM
    Beiträge
    15
    Ohhh.. Danke..
    Dann weiß ich ja, wenn meine Daten nachher nicht stimmen sollten, was ich als erstes verändern werde!!!!

    Ist zum Glück dann nur ne kleinigkeit, wenn ich das richtig verstanden habe, indem ich überall noch ein OUTER zwischenschiebe.. *hoff*

    Nochmals vielen DANK!!!!!!!!

Lesezeichen

Berechtigungen

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