Tom2: SELECT-Problem

Hallo liebe SQLer

Ich stehe vor einem Problem, dass mich (und mein Access 97[1]) an die Grenze treibt. Zuerst einmal zum DB-Design:

Ich habe eine Tabelle (RANGE), die aktuelle Daten speichert. In einer zweiten Tabelle (JOURNAL), die genau die gleichen Felder wie RANGE und ein paar zusätzliche hat, werden alle Änderungswünsche aufgenommen. Falls ein Änderungswunsch ok ist wird der entsprechende Datensatz in RANGE angepasst und im Datensatz in JOURNAL ein Flag (DONE) gesetzt. Ein wenig vereinfacht sieht das folgendermassen aus:

RANGE {pk_id,daten}
JOURNAL {pk_id,fk_rangeid,daten,done}

Jetzt brauche ich alle aktuellen Daten und den pk_id aus JOURNAL zu den aktuellen Daten. Die aktuellen Daten in JOURNAL sind die mit gesetzem DONE-Flag und der höchsten ID.

Fehlgeschlagene Versuche:

SELECT PK_ID,FK_RANGEID,DATEN FROM JOURNAL WHERE DONE=TRUE;
schlägt fehl, weil ich alle je dagewesenen Zustände der einzelnen Datensätze in RANGE zurückbekomme.

SELECT JOURNAL.PK_ID,RANGE.PK_ID,RANGE.DATEN
FROM RANGE LEFT JOIN JOURNAL ON RANGE.PK_ID = JOURNAL.FK_RANGEID;
liefert (wie auch INNER, RIGHT-JOIN und der vorherige SQL-Query) wieder alle Datensätze aus JOURNAL zurück.

Mit GROUP BY hab ich's auch versucht, aber dabei kommt auch nichts schlaues raus.

Wie kann ich jetzt entweder die beiden Tabellen richtig verbinden oder nur die Datensätze mit der höchsten ID aus JOURNAL ausgeben? Oder gibt es eine komplett andere Lösung?

Die einzige Lösung, die ich bis jetzt gefunden habe, ist pro Datensatz ein weiteres SELECT-Statement abzuschicken. Aber dies scheint mir Definition Schwachsinn zu sein ;-).

MfG und besten Dank

Tom2

[1] Es handelt sich um eine Access 97-Datenbank, auf die per ODBC und ASP zugegriffen wird.

--
SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
  1. Moin Moin !

    Jetzt brauche ich alle aktuellen Daten und den pk_id aus JOURNAL zu den aktuellen Daten. Die aktuellen Daten in JOURNAL sind die mit gesetzem DONE-Flag und der höchsten ID.

    SELECT ... FROM JOURNAL WHERE DONE=TRUE AND ID=SELECT MAX(ID) FROM JOURNAL [ und evtl. noch: ] WHERE DONE=TRUE

    Das sollte funktionieren.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. Hi Alexander

      SELECT ... FROM JOURNAL WHERE DONE=TRUE AND ID=SELECT MAX(ID) FROM JOURNAL [ und evtl. noch: ] WHERE DONE=TRUE

      Ein SELECT PK_ID,FK_RANGEID,DATEN FROM JOURNAL WHERE PK_ID=(SELECT MAX(PK_ID) FROM JOURNAL); gibt mir nur den neusten Änderungswunsch, bzw. mit dem DONE=TRUE den neusten aktuellen Datensatz zurück. Ich brauche jedoch alle aktuellen Datensätze.

      Knifflig, knifflig, und unser DB-Spezi sitzt jetzt wohl gerade am Frühstückstisch am anderen Ende der Welt (bei mind. 20° C und herrlichem Sonnenschein). :-/

      Subselects sind aber eine gute Idee. Ich denke, dass ich damit weiter komme.

      Besten Dank und MfG

      Tom2

      --
      SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
      ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
  2. Hi,
    ich hoffe, ich hab Dich richtig verstanden, dann müsste es so gehn:

    select r.pk_id, r.pk_daten, j.pk_id, j.daten
    from range r , journal j where r.pk_id = (select max(j.pk_id) from journal j where done = true) group by r.pk_id

    gruss
    sky.connect

    1. Hi sky.connect

      ich hoffe, ich hab Dich richtig verstanden, dann müsste es so gehn:

      select r.pk_id, r.pk_daten, j.pk_id, j.daten
      from range r , journal j where r.pk_id = (select max(j.pk_id) from journal j where done = true) group by r.pk_id

      Das funktioniert nicht, weil dadurch nicht klar ist, von welchem Datensatz daten stammen soll. Das müsste auch der aktuellste sein.

      Trotzdem Danke

      Tom2

      --
      SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
      ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}