From: | "Andreas Kretschmer - internet24 GmbH" <kretschmer(at)internet24(dot)de> |
---|---|
To: | "'Mag(dot) Dr(dot) Stefan Krejci'" <office(at)skrejci(dot)com>, <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | AW: [pgsql-de-allgemein] AW: [pgsql-de-allgemein] Mehrere Einträge anhand Primary-Key-Liste löschen |
Date: | 2012-07-21 16:15:35 |
Message-ID: | 004a01cd675c004a01cd675c$0f5f2c00$2e1d8400$@internet24.def5f2c00e1d8400$@internet24.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
> 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)
From | Date | Subject | |
---|---|---|---|
Next Message | Susanne Ebrecht | 2012-07-21 16:28:49 | Re: [pgsql-de-allgemein] AW: [pgsql-de-allgemein] Mehrere Einträge anhand Primary-Key-Liste löschen |
Previous Message | Mag. Dr. Stefan Krejci | 2012-07-21 15:31:47 | AW: [pgsql-de-allgemein] Mehrere Einträge anhand Primary-Key-Liste löschen |