Anmelden

View Full Version : Löschen per SQL in 2 Tabellen



harbir
12-03-14, 13:57
Hallo,

gibt es eine Möglichkeit, gleiche Sätze in 2 Tabellen gleichzeitig zu löschen?

z.B.
Tabelle 1:
Kunde 1
Kunde 3
Kunde 4

Tabelle 2:
Kunde 1
Kunde 2
Kunde 4


und ich möchte als Ergebnis die Kunden 1 und 4, die in beiden Tabellen vorkommen, aus beiden Tabellen löschen.

Geht das mit einer SQL-Anweisung ohne Zwischentabelle?

Danke
harbir

BenderD
12-03-14, 14:13
... gleichzeitig kann man nicht einmal mehrere Sätze in einer Tabelle löschen. Klammern, sprich entweder alles geht oder nix, kann man beliebige Operationen unter Commit.

D*B

Fuerchau
12-03-14, 14:29
Da brauchst du 2 SQL's:

delete from table1 a
where exists (select * from table2 b where a.key=b.key)

delete from table2 a
where not exists (select * from table1 b where a.key=b.key)

malzusrex
12-03-14, 14:31
@Baldur

sind dann aber mit dem 2. SQL nicht auch die Sätze raus, die es vorher nicht in tabelle 1 gab ?

ich denke es geht sogar nur über 3 SQL.

1.)
Select kunde from table1 a
where exists (select * from table2 b where a.key=b.key)

mit Ausgabe in einer TMPFILE

2.)
delete from table1 a
where exists (select * from TMPFILE b where a.key=b.key)
3.)
delete from table2 a
where exists (select * from TMPFILE b where a.key=b.key)

andreaspr@aon.at
12-03-14, 14:44
Für die zwischen Tabelle verwende eine GLOBAL TEMPORARY TABLE.
Diese wird automatisch in der QTEMP angelegt.


DECLARE GLOBAL TEMPORARY TABLE SESSION.tmp_tab1 like tab1

Mit Drop Table oder sobald der Job endet wird die Tabelle gelöscht.

lg Andreas

Fuerchau
12-03-14, 15:34
Ja, ihr habt Recht:

create [ global temporary ] table as (
select blabla
) with data