Update innerhalb eines Selects

Rootbob91

Aktiver Benutzer
Beiträge
27
Hallo zusammen, ich habe folgendes Szenario:

Ich möchte gerne Daten aus einer Tabelle mit Select auslesen.

Jetzt meine Frage dazu:
Gibt es eine Möglichkeit, die ausgelesenen Daten direkt mit einem Flag zu besetzen?

Ganz einfach gesagt nehmen wir Tabelle A mit folgenden Spalten
- ID (INT, Primary AutoInc)
- Whatever (zb. n String/Text)
- WurdeAbgerufen (INT) weil 0 oder 1 (mit BITs hab ich so meine Probleme :/)

Nun möchte ich beim auslesen von Datensätzen dieser Tabelle, das WurdeAbgerufen-Flag direkt in einem Select auf 1 setzen. Sowas wie:

SELECT ID, Whatever, (UPDATE tableA SET WurdeAbgerufen=1) FROM tableA WHERE WurdeAbgerufen=0

Kennt jemand eine solche Möglichkeit? Sollte man das so machen, oder lieber nicht?
 
Werbung:
In PG ginge das übrigens:

Code:
test=*# select * from rootbob ;
 id | whatever | wurde_abgerufen
----+----------+-----------------
  1 | val1  | f
  2 | val2  | f
(2 Zeilen)

test=*# with x as (update rootbob set wurde_abgerufen = true where id = 1 returning *) select * from x;
 id | whatever | wurde_abgerufen
----+----------+-----------------
  1 | val1  | t
(1 Zeile)

test=*# select * from rootbob ;
 id | whatever | wurde_abgerufen
----+----------+-----------------
  2 | val2  | f
  1 | val1  | t
(2 Zeilen)

test=*#

Falls die Transaktion fehlschlägt würde aber nix passieren. Je nach dem, was Du vorhast, wäre für Dich aber auch SELECT ... FOR UPDATE SKIP LOCKED interessant:

select * from depesz; » Blog Archive » Waiting for 9.5 – Implement SKIP LOCKED for row-level locks

Du ahnst es sicher schon: geht auch nur mit PG.
 
Oha, ziemlich verwirrend, ich merke (falls du diesen SQL-Dialekt(?) in der letzten Antwort auf meine Frage in nem anderen Thread verwendet hast), dass das ziemlich viel mehr kann?
Allerdings denke ich, dass ich erstmal lange beschäftigt wäre umzusteigen bzw. meine Server dazu zu bewegen plötzlich diesen Dialekt zu unterstützen.

Was ist das eigentlich genau? Ich schaue mal nach was PG ist. Vll. Postgress (wenns so geschrieben wird) SQL?
 
Werbung:
Ja. PostgreSQL. Eine freie Datenbank, freier als MySQL. Und viel besser. Nächste Woche erscheint eine neue Version (zumindest sehr wahrscheinlich...), die z.B. parallele Ausführung von Abfragen unterstützt.

Du kannst Dein Wissen zu MySQL oder SQL allgemein auch mit PostgreSQL verwenden, kein Problem.
 
Zurück
Oben