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!
- 26 / 4 Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord 11
- 26 / 4 Rykte: Switch 2 släpps i höst – OLED-variant dröjer 35
- 26 / 4 Iphones marknadsandel faller i USA 43
- 25 / 4 Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 96
- 25 / 4 Nu stiger hårddiskpriserna med uppemot 10 procent 23
- Bitcoin ATH i SEK55
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk96
- Övergivet skadeprogram infekterar miljontals maskiner12
- Helgsnack: Är all reklam till ondo?78
- Guide: Sätta upp en RAM-disk för Nvidia Instant Replay (f.d. Shadowplay)82
- 1080ti samt 3060ti1
- Elbilar - Tråden för intresserade23198
- Vilken bok läste du senast?200
- Har Microsoft blockad nätverket?11
- Formel 1-tråden8894
- Säljes AMD Ryzen 9 7950X 4.5 GHz 81MB
- Köpes 17" laptop köpes.
- Köpes Sökes SFX powersupply, 400-750 watt
- Säljes Säljer helt NYTT Vengeance 32GB RGB DDR5 6000Mhz
- Säljes Bärbar ASUS 4800H, RTX 2060, 512 GB SSD, 16 GB RAM
- Säljes Helt NYTT Gigabyte Z790 Aorus Elite AX.
- Säljes Valve Index VR Kit
- Köpes Playstation 4 Pro
- Säljes 2x Xeon 5365 3.0GHz + 8gb DDR2 667MHz + Nvidia GT7300 GPU
- Säljes Lian Li O11 Dynamic XL svart samt 360mm radiatorer
- Stöd för komprimering i fler format på gång till Windows10
- Krönika: "Early access" är utstuderad girighet37
- Övergivet skadeprogram infekterar miljontals maskiner12
- Helgsnack: Är all reklam till ondo?78
- Microsoft släpper källkoden till MS‑DOS 4.0016
- Ny caps lock-symbol i Windows förbryllar HP-användare21
- Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord11
- Rykte: Switch 2 släpps i höst – OLED-variant dröjer35
- NetonNet varnar om läckta kunduppgifter23
- Premiär på SweClockers! Månadens drop med gamingskärm hos Elgiganten74