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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.