Jag vill kunna plocka ut 2 st poster i från min access-databas, sen vill jag ta värdet ifrån första postens kolumn som heter "nummer" med värdet "12" (t.ex.) och byta plats med den andra postens värde "7" (t.ex.).
Alltså, uppdatera första postens värde med den andra postens värde och tvärsom.
c1=c2=c1, dvs. man får c2s värde i båda kolumnerna
På ett eller annat sätt måste man mellanlagra en av kolumnerna, vilket smidigast görs mha en extrakolumn
update t set temp = c1
update t set c1 = c2,c2=temp
[r]Å ena sidan kan man göra det i en UPDATE (temp = c1,c1 = c2,c2=temp), å andra sidan kan man sannolikt inte garantera exekveringsordningen, så tre separata är säkrast[/r]
Det gläder mig att det ska vara så, men det funkar åtminstone inte så i MySQL. Access brukar inte vara bättre, men är det alldeles säkert i det här fallet.
Gött! :)
The <value expression>s of a set clause are effectively evaluated for each row of T before updating any row of T
Vid närmare eftertanke så säger ju inte det något om detta problem, eftersom vi fortfarande evaluerar inom en rad.
LarsG, finns det något som fastlägger exekveringsordningen på SET-satserna?
Hmm, missförstår jag er eller missförstår ni mig.
Om man nu ska använda LarsG rad:
update t set c1 = c2,c2 = c1
så uppdaterar väl den två kolumner i en och samma post eller?
Problemet som jag har är: kolumnen i två poster som ska byta plats.
Aha, nu förstår jag hur ni tror att jag menar!(förlåt om jag är dålig på att förklara mig!)
Jag tar det från början igen:
Jag har som sagt en tabell med en kolumn som heter "nummer". Sen vill jag ta ut två st poster och byta värdet från "nummer" i post 1 till post 2 och från "nummer" i post 2 till post 1.
Hajjar ni nu?
Typ så här:
Du får nog göra det mer programmeringsmässigt. Jag förutsätter att du har något unikt id i tabellen och om du t.ex. vill byta värden för posterna med id 11 och 47 så:
sql = "select id,nummer from t " & _
" where id in (11,47) "
set rs = connect.execute(sql)
while not rs.eof
if cint(rs("id")) = 11 then
sql1 = "update t set nummer = " & _
rs("nummer") & _
" where id = 47 "
else
sql2 = "update t set set nummer = " & _
rs("nummer") & _
" where id = 11 "
end if
rs.movenext
wend
rs.close
conn.execute sql1,,128
conn.execute sql2,,128
------------------ essentitia preter non sans multiplicandum
Jag tolkar texten som att man (konceptuellt) skall beräkna alla de nya värdena för kolumnerna innan man gör någon update överhuvudtaget.
Sen så står det också att en update sker genom att man tar en kopia av den befintliga raden och modifierar den och att värdet av en kolumnreferens är värdet i den kolumnen i den befintliga raden.
------------------ essentitia preter non sans multiplicandum
Sen så står det också att en update sker genom att man tar en kopia av den befintliga raden och modifierar den och att värdet av en kolumnreferens är värdet i den kolumnen i den befintliga raden.
I that case, the thing is beef! :)
130 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17