AW: [pgsql-de-allgemein] AW: [pg sql-de-allgemein] Mehrere Einträ ge anhand Primary-Key-Liste lösc hen
"Andreas Kretschmer - internet24 GmbH" <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.german |
|---|---|
| Message-ID | <[email protected]> |
> Aber zwei oder mehrere Tabellen lässt PostgreSQL beim DELETE-Befehl > nicht zu. Und wenn ich die Leser-Tabelle weg mache (weil ja aus der > LxAbo rausgelöscht werden soll), frisst mir der Parser die WHERE-Clause > nicht mehr. Susanne, wie müsste der Befehl denn lauten? Bitte-danke! > > > > Danke, Andreas, übrigens für die vereinfachte Alters-Bestimmung ;-) CTEs > weiß ich, was sind wCTE? Bei mir läuft aktuell Version 9.0.4 – das > Update auf die aktuelle Version möchte ich bald machen, und wäre > vermutlich ein weiteres Thema hier, wie ich das korrekt angehe… Doch doch ... man kann in mehr als einer Tabelle gleichzeitig löschen: test=*# create table foo1 (i int); CREATE TABLE test=*# create table foo2 (i int); CREATE TABLE test=*# create table foo3 (i int); CREATE TABLE test=*# insert into foo1 select * from generate_series(1,10); INSERT 0 10 test=*# insert into foo2 select * from generate_series(1,10); INSERT 0 10 test=*# insert into foo3 select * from generate_series(1,10); INSERT 0 10 test=*# with x1 as (delete from foo1 where i < 5 returning i), x2 as (delete from foo2 where i > 5 returning i), x3 as (delete from foo3 where i = 5 returning i) select * from x1 union all select * from x2 union all select * from x3; i ---- 1 2 3 4 6 7 8 9 10 5 (10 rows) So, was vermutest Du nun in den einzelnen Tabellen? test=*# select * from foo1; i ---- 5 6 7 8 9 10 (6 rows) test=*# select * from foo2; i --- 1 2 3 4 5 (5 rows) test=*# select * from foo3; i ---- 1 2 3 4 6 7 8 9 10 (9 rows) Das writeableCTE bedeutet (ab 9.1), daß Du mit den Returning-Werten weiter arbeiten kannst, neues Beispiel: test=*# create table foo1 (i int); CREATE TABLE test=*# create table foo2 (i int); CREATE TABLE test=*# insert into foo1 select * from generate_series(1,10); INSERT 0 10 test=*# with x1 as (delete from foo1 where i < 5 returning i), x2 as (delete from foo1 where i > 7 returning i) insert into foo2 select * from x1; INSERT 0 4 test=*# select * from foo2; i --- 1 2 3 4 (4 rows)
smime.p7s
(application/pkcs7-signature, 5 KB) - not displayed