MySQL - Uppdatera flera rader
Jag försöker att uppdatera en tabell på flera rader samtidigt med ett anrop.
Tabellen som ska uppdateras heter RawStock och innehåller name och amount.
De andra 2 tabellerna som kan vara relevanta är:
Product(ProductName)
Recipie(ProductName, name, amountUsed)
Här ska amount i rawstock minskas med den mängd som passar ihop med recepie.
alltså t.ex.:
Product: Apelsin
Recipie: (Apelsin, Skal, 3), (Apelsin, kött, 4)
RawStock(Skal, 10), (Kött, 100)
Då ska det tas bort från rawstock så skal bara har 7 kvar och kött har 96 kvar.
Den sats jag skrivit nu är:
update RawStock where Name = (select name from Recipie natural join Product where productname = Apelsin) set amount = (amount - (select amount from name from recipie natural join productname ))
men detta verkar inte vara rätt
Du borde kunna lista ut hur det ska fungera för dig, fråga annars igen.
Att google fungerar precis like bra som att fråga här. Första svaret på google för "sql update several rows" ger svaret:
UPDATE config t1 JOIN config t2
ON t1.config_name = 'name1' AND t2.config_name = 'name2'
SET t1.config_value = 'value',
t2.config_value = 'value2';
Lite oklart vad du är ute efter i slutändan, men vad jag förstår så kommer du vilja hålla något slags lager i RawStock och i Recipe ska du fylla på med rader med vad som går åt för ett visst recept. Dessa rader behöver du då först summera innan du drar av dem i RawStock om det skulle kunna förekomma flera rader av samma typ.
Update rs
SET rs.amount = rs.amount - x.amountUsed
from (
select r.Name, sum(r.amountUsed) as amountUsed
from Recipe r
group by r.Name
) as x
inner join RawStock rs on rs.Name = r.Name
Ovan kommer minska Rawstock med de antal som finns specificerade för varje typ (Skal, Kött)
Känns onödigt att ens joina in tabellen Product då den bara innehåller ProductName. I en bra databas bör du istället joina på ID-kolumner av typ integer som är satta till primary eller foreign keys istället för att joina på en textsträng.
Själva strukturen känns lite stökig. Kolumnen Recipe borde kanske heta RecipeComponents och innehålla ett RecipeID som går via en foreign key till en maintabell för själva receptet där namn på receptet, beskrivning, etc finns.
Lycka till!
- Igår AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 13
- Igår Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz 13
- 23 / 4 Meta öppnar upp Quests OS – vill bli VR-världens Android 12
- 23 / 4 Googles nästa Chromecast får dubblerad lagring 74
- 23 / 4 EK Water Blocks lovar bot och bättring 16
- Valve täpper till kryphål i Steam-återbetalningar19
- Viaplay sätter ner foten mot delade konton43
- EU röstar igenom ”rätten att reparera”19
- Amazons Fallout-serie regisseras av Jonathan Nolan (Inte den Nolan, men hans brorsa)325
- LLama3 eller "Hur kan en språkmodell stapla saker?"37
- Gamingskärm - ultrawide eller inte?21
- MC - förstahoj, körkort och utrustning [Samlingstråd]3037
- Uppgradera 1080Ti, bäst bang for the buck med äldre rigg.8
- Dagens fynd (bara tips, ingen diskussion) — Läs första inlägget först!18417
- Wordle på svenska - ordlig.se7853
- Köpes i7 12th 13 14 gen
- Säljes 64 Gig DDR5 2x32Gig, 6000MT/s CL36-38-38 1.35V EXPO/XMP
- Säljes Gamingdator I9-13900KF - 7800 XT - Z690 - DDR5 32GB - Define 7
- Säljes T700 2TB M2 SSD. Lian Li Strimer 24pin. Vertical mount
- Säljes Dell Poweredge R330
- Bytes 3070 MSI Suprim X mot Strix
- Säljes Sapphire pulse 6700xt
- Säljes XPS 9370
- Säljes Gigabyte GeForce RTX 4080 16GB GAMING OC
- Säljes Gamingtillbehör - HyperX, Logitech
- EU röstar igenom ”rätten att reparera”19
- Viaplay sätter ner foten mot delade konton43
- AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna?13
- Systembolaget varnar: Dryckesbrist efter hackerattack66
- Veckans fråga: Hur mycket lagringsutrymme har din dator?87
- Valve täpper till kryphål i Steam-återbetalningar18
- Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz13
- Google skjuter på utfasning av tredjepartskakor till 202516
- Skadlig kod sprids via lömska Github-länkar14
- Microsoft blockerar äldre processorer i Windows 11 24H237