Twilo: Postgresql 7.4: Datensätze löschen

Hallo,

ich möchte bestimmte Datensätze in einer Tabelle löschen, die ich vorher per SQL ermittelt habe

CREATE TEMPORARY TABLE z AS  
    SELECT DISTINCT reg_id, bez_id, typ, lfdnr, gueltigab  
    FROM finanzen a1  
    WHERE TO_CHAR(a1.gueltigab, 'YYYY-MM-DD') IN (  
    SELECT gueltigab FROM (  
        SELECT foo.reg_id, foo.bez_id, foo.typ, foo.lfdnr, TO_CHAR(foo.gueltigab, 'YYYY-MM-DD') as gueltigab, count(foo.gueltigab) FROM (  
            SELECT DISTINCT reg_id, bez_id, typ, lfdnr, gueltigab FROM finanzen  
        ) as foo  
        GROUP BY foo.reg_id, foo.bez_id, foo.typ, foo.lfdnr, TO_CHAR(foo.gueltigab, 'YYYY-MM-DD')  
        ORDER BY foo.reg_id, foo.bez_id, foo.typ, foo.lfdnr, TO_CHAR(foo.gueltigab, 'YYYY-MM-DD')  
    )as bar  
    WHERE bar.count > 1 AND a1.reg_id = bar.reg_id AND a1.typ = bar.typ AND a1.lfdnr = bar.lfdnr AND bar.gueltigab = TO_CHAR(a1.gueltigab, 'YYYY-MM-DD')  
);  
  
CREATE TEMPORARY TABLE y AS  
    SELECT reg_id, bez_id, typ, lfdnr, gueltigab  
    FROM finanzen b1  
    WHERE  
        gueltigab in (SELECT gueltigab FROM z WHERE b1.reg_id = z.reg_id AND b1.typ = z.typ AND b1.lfdnr = z.lfdnr)  
    and gueltigab != (SELECT MAX(gueltigab) FROM z WHERE b1.reg_id = z.reg_id AND b1.typ = z.typ AND b1.lfdnr = z.lfdnr);

in der Tabelle y steht dann ungefähr folgendes drin

reg_id | bez_id | typ | lfdnr |      gueltigab
--------+--------+-----+-------+---------------------
    246 |      2 | E   |     1 | 2006-11-01 16:02:13
    246 |      2 | A   |     4 | 2006-11-01 16:02:13
    246 |      2 | A   |     5 | 2006-11-01 16:02:13
    246 |      2 | A   |     6 | 2006-11-01 16:02:13
    246 |      2 | A   |     7 | 2006-11-01 16:02:13
    246 |      2 | A   |     1 | 2006-11-01 16:02:13
    246 |      2 | A   |     2 | 2006-11-01 16:02:13
[...]
(812 Zeilen)

wie müsste jetzt mein DELETE SQL Statement aussehen?

DELETE FROM finanzen WHERE ?
die Where Klausel müßte ungefähr so aussehen "reg_id = y.reg_id and bez_id = y.bez_id an typ = y.typ and lfdnr = y.lfdnr and gueltigab = y.gueltigab"

Ab Postgresql 8.1 kann man dafür wohl USING verwenden - wie löse ich das aber mit Postgresql 7.4?

mfg
Twilo

  1. Hallo,

    wie müsste jetzt mein DELETE SQL Statement aussehen?

    in der interactiven Dokumentation habe ich ein Hinweis gefunden, dass man beim WHERE beide Tabellen hinschreiben kann

    das folgende DELETE SQL Statement funktioniert:
    DELETE FROM finanzen WHERE finanzen.reg_id = y.reg_id and finanzen.bez_id = y.bez_id and finanzen.typ = y.typ and finanzen.lfdnr = y.lfdnr and finanzen.gueltigab = y.gueltigab

    das Problem hat sich also von alleine beseitigt :-)

    mfg
    Twilo

    1. Hi!

      das Problem hat sich also von alleine beseitigt :-)

      Wohl kaum, es sei denn Du bezeichnest Dich als Problem ;)

      off:PP