Hilfe bei SQL-Aktualisierungsabfrage

daya166

Neuer Benutzer
Beiträge
4
Hallo,
momentan muss ich ein Projekt machen, indem Datenbanken benutzt werden, wobei ich jedoch ein Problem habe. Das Problem liegt darin allgemeine, einzelne Aktualisierungen durchzuführen, ohne spezielle Beding- ungen. Ich schildere hier das Problem anhand meiner Tabelle:

Bewohner_ID Beruf Einkommen
1 Arbeitslos 0
2 Arbeitslos 0
3 Arbeitslos 0
4 Arbeitslos 0

Ich möchte per ButtonClick (Lazarus) Einträge aktualisieren. In dem Fall möchte ich auf ButtonClick nur einen
Bewohner, welcher arbeitslos ist, den Beruf 'Holzfäller' zuweisen. Ich weiß aber nicht, wie das in SQL formulieren kann. Bisher habe ich es so versucht, jedoch ohne Erfolg.

UPDATE tblbewohner set Beruf = 'Holzfäller' where ???;

Ich hoffe jemand kann mir bei meinem Problem behilflich sein.
Mit freundlichen Grüßen
ein Informatik Schüler
 
Werbung:
jeder Datensatz sollte eine eindeutige ID oder einen anderen eindeutigen Schlüssel haben - einen PRIMARY KEY. Diesen kannst Du dann im UPDATE verwenden.

Also, in Deinem Falle: WHERE Bewohner_ID = 1, wenn es dieser denn sein soll.
 
Hallo,
danke für die schnelle Antwort. Allerdings ist dies nicht mein Problem.
Was ich meine ist, einem einzelnen, arbeitslosen Bewohner den Beruf Holzfäller zuzuweisen,
ohne die ID angeben zu müssen. Also per ButtonClick wird automatisch ein arbeitsloser Bewohner
einem Beruf zugewiesen.

MfG
 
ah so...

Code:
test=# create table daya166(id serial primary key, beruf text default 'Arbeitslos', Einkommen int default 0);
CREATE TABLE
test=*# insert into daya166 select * from generate_series(1,4) s;
INSERT 0 4
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  1 | Arbeitslos |         0
  2 | Arbeitslos |         0
  3 | Arbeitslos |         0
  4 | Arbeitslos |         0
(4 Zeilen)

test=*# with id as (select min(id)  from daya166 where beruf = 'Arbeitslos') update daya166 set beruf = 'Holzfäller' from id where id = id.min;
UPDATE 1
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  2 | Arbeitslos |         0
  3 | Arbeitslos |         0
  4 | Arbeitslos |         0
  1 | Holzfäller |         0
(4 Zeilen)

test=*# with id as (select min(id)  from daya166 where beruf = 'Arbeitslos') update daya166 set beruf = 'Holzfäller' from id where id = id.min;
UPDATE 1
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  3 | Arbeitslos |         0
  4 | Arbeitslos |         0
  1 | Holzfäller |         0
  2 | Holzfäller |         0
(4 Zeilen)

test=*# with id as (select min(id)  from daya166 where beruf = 'Arbeitslos') update daya166 set beruf = 'Holzfäller' from id where id = id.min;
UPDATE 1
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  4 | Arbeitslos |         0
  1 | Holzfäller |         0
  2 | Holzfäller |         0
  3 | Holzfäller |         0
(4 Zeilen)

test=*# with id as (select min(id)  from daya166 where beruf = 'Arbeitslos') update daya166 set beruf = 'Holzfäller' from id where id = id.min;
UPDATE 1
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  1 | Holzfäller |         0
  2 | Holzfäller |         0
  3 | Holzfäller |         0
  4 | Holzfäller |         0
(4 Zeilen)

test=*# with id as (select min(id)  from daya166 where beruf = 'Arbeitslos') update daya166 set beruf = 'Holzfäller' from id where id = id.min;
UPDATE 0
test=*#

ist jetzt mit PostgreSQL gemacht, mußt an MySQL etwas anpassen.
 
Ich kriege es irgendwie nicht gebacken, das mit MySQL anzupassen,
habe ständig irgendwelche Syntaxfehler und weiß nicht wie ich diese beheben soll.
 
einfache Lösung: auf PostgreSQL umsteigen ;-)

Alternativ: Subselect, um eine ID zu erhalten (LIMIT 1), wo derzeit noch Beruf = Arbeitslos ist. Gib Dir Mühe!
 
Okay,
leider kann ich nicht für das Projekt auf PostgreSQL umsteigen, danke dennoch für Deine Hilfe.
Ich versuche weiterhin das Problem zu lösen.

MfG
 
Werbung:
nu stell Dich mal nicht so an ...

Code:
test=# create table daya166(id serial primary key, beruf text default 'Arbeitslos', Einkommen int default 0);
CREATE TABLE
test=*# insert into daya166 select * from generate_series(1,4) s;
INSERT 0 4
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  1 | Arbeitslos |         0
  2 | Arbeitslos |         0
  3 | Arbeitslos |         0
  4 | Arbeitslos |         0
(4 Zeilen)

test=*# update daya166 set beruf = 'Holzfäller' where id = (select min(id) from daya166 where beruf = 'Arbeitslos');
UPDATE 1
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  2 | Arbeitslos |         0
  3 | Arbeitslos |         0
  4 | Arbeitslos |         0
  1 | Holzfäller |         0
(4 Zeilen)

test=*# update daya166 set beruf = 'Holzfäller' where id = (select min(id) from daya166 where beruf = 'Arbeitslos');
UPDATE 1
test=*# select * from daya166;
 id |   beruf    | einkommen
----+------------+-----------
  3 | Arbeitslos |         0
  4 | Arbeitslos |         0
  1 | Holzfäller |         0
  2 | Holzfäller |         0
(4 Zeilen)

test=*#
 
Zurück
Oben