Postgresql 7.4: Datensätze löschen
Twilo
- datenbank
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
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
Hi!
das Problem hat sich also von alleine beseitigt :-)
Wohl kaum, es sei denn Du bezeichnest Dich als Problem ;)
off:PP