Anmelden

View Full Version : update der ersten 100 sätze



dibe
18-03-15, 12:18
Hallo
wenn ich eine Datei mit SQL erzeuge kann ich ein

create table MyDatei as (select f1, f3, f5 from basisdatei fetch first 100 rows only)
machen um nur 100 Sätze in die neue Datei zu bekommen.

Jetzt haben wir die Aufgabe, nach einer Summenübersicht nur n Sätze zu verarbeiten.


Anzeige:
Status 1 1551 Sätze
wieviel verarbeiten: __55

Dann soll ein

Update Datei set Status = 2 where status = 1 fetch for 55 rows only
laufen.
Das geht aber nicht. Gibt es eine andere Syntax?

Danke
DiBe

andreaspr@aon.at
18-03-15, 12:36
Du bräuchtest eher sowas:

Update Datei set Status = 2 where id in (Select id from Datei where status = 1 fetch first 100 rows only)

dibe
18-03-15, 12:47
Ja, danke.
Das könnte gehen. Zumindest in diesem Fall habe ich einen Unique Key mit dem das geht.

Danke
Dietlinde Beck

Fuerchau
18-03-15, 12:53
Wie wäre es mit dem Merge-Statement?

merge into zieltable a
using (select f1, f2, f3 from myfile fetch first 100 rows only) b
on a.key = b.key
when matched update set Status = 2

dibe
18-03-15, 13:01
???
Wie liest man das?
Heist merge nicht mischen? mischen mit Update?
Ist das der create und der update zusammen? (das kann ich es leider nicht verwenden)
DiBe

Fuerchau
18-03-15, 13:19
Generell liest man das so:

merge into zieltablle z
using quelltabelle q on z.key = q.key

when matched -- also wenn die Beziehung stimmt
update set .... -- dann also update des Zielsatzes

when not matched -- als wenn das ziel nicht da ist
insert ...

Wobei eben die Bedingung "when matched" oder "when not matched" auch weggelassen werden kann.
Man kann auch mehrere when-Klauseln definieren:

when matched and q.f1 = X
update set Status = 2

when matched and q.f1 = Y
update set Status = 3

when matched and q.f1 = z
delete

usw. usw.
Was denn nun gemischt wird oder nicht bleibt dir überlassen.