SQL markieren von Datensätzen min Funktion

ierde

Newbie
Registriert
Sep. 2010
Beiträge
3
Hallo
mit dem Befehl
SELECT MIN(id) FROM Angebot GROUP BY AngebotNr ;
bekomme ich den ersten angelegten Datensatz einen Angebotes.

Nun möchte ich gern den ersten Datensatz in der Tabelle Angebot im Feld Pos mit einer 1 markieren

Versucht habe ich folgendes:

UPDATE Angebot set Pos=1 Where (SELECT MIN(id) FROM Angebot GROUP BY AngebotNr) ;
You can't specify target table 'Angebot' for update in FROM clause
 
Wie wärs mit
Code:
Create temporary table t(id,pos);
insert into t select min(id),1 from Angebot groupy by Angebot Nr;
update Angebot set pos=select pos from t or 0;
Ohne Gewähr auf Funktionalität.
Das Problem ist, dass eine Tabelle während des Updatevogangs inkonsistent ist (bspw. ein paralleler Updatevorgang für bessere Geschwindigkeit). Daher kann man nicht die Tabelle selbst referenzieren.
 
ierde schrieb:
Hallo
mit dem Befehl
SELECT MIN(id) FROM Angebot GROUP BY AngebotNr ;
bekomme ich den ersten angelegten Datensatz einen Angebotes.

Nun möchte ich gern den ersten Datensatz in der Tabelle Angebot im Feld Pos mit einer 1 markieren

Versucht habe ich folgendes:

UPDATE Angebot set Pos=1 Where (SELECT MIN(id) FROM Angebot GROUP BY AngebotNr) ;
You can't specify target table 'Angebot' for update in FROM clause


Mein Vorschlag wäre folgender:

UPDATE Angebot set Pos=1 Where AngebotNr IN (SELECT MIN(id) FROM Angebot GROUP BY AngebotNr);
 
kommt leider auch die Meldung

You can't specify target table 'Angebot' for update in FROM clause
 
Schade!
Ist das vielleicht MySQL?

Wenn ja, dann ist der Fehler HIER beschrieben.
Scheinbar mußt Du tatsächlich solch ein Konstrukt (oder ein ähnliches) verwenden, wie es Blitzmerker in seinem Beitrag oben beschrieben hat.
 
Hi
ich habs jetzt so gelöst. Danke Euch

DELETE FROM db.save;
Insert into db.save (idx) (select min(id) from db.angebot group by AngebotNr);
UPDATE db.angebot AS Z right JOIN db.Save AS Q ON( Z.id = Q.idx) SET Z.Pos=1;
 
Zurück
Oben