webForumDet fria alternativet

Hjälp med update sats

Databaser & SQLur Databashanterare & SQL

8 svar · 289 visningar · startad av ConnyFox

Medlem sedan aug. 20011 087 inlägg
Frågan#1

Ok detta vill jag göra.
Tabell 1 innehåller produkter samt ett fält sald

tabell 2 innehåller produkter samt ett fält antal och ett fällt prodID

jag vill med en update-fråga göra så att alla varorna i tabell 1 där ID stämmer överänns med prodID i tabell2 uppdateras så att sald blir sald+antal

Exempel :

Tabell 1
ID Sald
1 15

Tabell2
ProdID Antal
1 5

i detta fallet skall alltså sald i tabell 1 uppdateras till 20

hur gör jag detta?

Medlem sedan feb. 200112 078 inlägg
#2

För MS SQLServer.

update tabell1 t1 set Sald = Sald + coalesce(select antal from tabell2 t2 where t2.prodid = t1.id,0)
Medlem sedan aug. 20011 087 inlägg
#3

Hmm dum som jag är glömde jag skriva att det är MySQL jag använder :(

Medlem sedan feb. 200112 078 inlägg
#4

Ja du, då vågar jag inte riktigt ge mig på det. Jag har ingen aning ifall Coalesce finns i mySQL eller ifall man behöver paranteser runt subqueries.

Men, vi gör en wildchance;

update tabell1 t1 set Sald = Sald + (select antal from tabell2 t2 where t2.prodid = t1.id)
Medlem sedan nov. 20017 144 inlägg
#5

Visst, coalesce() finns i mySql.
Men subquerys stöds endast i 4.1 eller senare. ;)
I.s.f så får du först göra select-satsen som du aplicerar in med en variabel i din update.

Medlem sedan aug. 20011 087 inlägg
#6

Problemet med subqueries är ju att man behöver ha mysql 4.1 eller senare och dom flesta webhotell har inte det..

Medlem sedan juni 200032 969 inlägg
#7

Jag använder visserligen SQL Server, men jag hade försökt ge mig på någonting sånt här:

UPDATE tabell1
SET Sald = t1.Sald + coalesce(t2.antal)
FROM tabell1 t1, tabell2 t2
WHERE t1.id = t2.prodid
Medlem sedan juni 200032 969 inlägg
#8

Visserligen kan man ju läsa på mysql.com (det antar jag att du redan gjort):

Starting with MySQL 4.0.4, you can also perform UPDATE operations that cover multiple tables:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

mvh

Medlem sedan aug. 20011 087 inlägg
#9

har inte läst allt.. ;) ok men tack, skall testa det.

125 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)