Jeg vil gerne have flettet tabel 2 ind i tabel 1, således, at tabel 1 får flg. indhold:
Id Navn Antal -------------- 1 Hans 11 2 Jens 5 3 Egon 7
Hvis et navn eksisterer i tabel 2, men ikke i tabel 1, *tilføjes* det ganske enkelt til tabel 1 sammen med antal (svarer til \"Egon\" i eksemplet).
Hvis et navn eksisterer i både tabel 1 og 2, *opdateres* blot navnets antal i tabel 1 (det nye antal lægges oven i det gamle). Svarer til \"Hans\" i eksemplet.
Jeg kan selvfølgelig godt lave dette på klienten ved at selecte, chekke, opdatere, indsætte osv... men jeg vil gerne have mysql til at klare det hele selv.
To ting er vigtige: - Posterne i tabel 1 skal beholde deres Id (Hans skal altid være 1 osv.) - God performance er altafgørende; hastigheden skal helst være acceptabel, selv ved en million poster eller mere.
Svaret kan evt. indeholde tips til opbygning af relevante index\'er, der vil øge performance.
Det gør det da heller ikke. Det var bare min første tanke da jeg læste spørgsmålet. Da der jo er tale om mere benarbejde end problemløsning. Men ok..det er helt efter reglerne.
Jeg ser det som problemløsning - det er ikke et eller andet stort, færdigt system jeg efterspørger; blot et par tips til SQL\'en, så jeg (og forhåbentlig andre, der står i samme situation) kan komme ud af den baglås, jeg er havnet i med det her problem.
Men du har da ret - det er er seriøst spørgsmål, og jeg håber også på et seriøst svar (derfor har jeg sat relativt mange points på).
Der er den slags, jeg har siddet og rodet lidt med - der er nogle problemer i det: Det kræver, at man har trukket navnene ud (man skal jo f.eks. vide, at der er en, der hedder Hans). Dette kan løses med en GROUP BY, men den er nok for langsom. Det samme gælder i øvrigt en COUNT på f.eks. en million rows.
De to næste statements er OK, men hele strukturen skal smides ind i en løkke (køres for hvert navn).
Alt dette gør, at man er nødt til at styre det fra klienten (udtræk af navne -> generering af SELECT-statement, alt inde i en lang løkke).
Jeg tror, at det, vi skal have fat i, er, at alt styres af mysql-serveren (dvs. klienten står kun for at køre et (lavt) antal faste SQL-statements).
Men hvis du har andre forslag/modargumenter, vil jeg da gerne høre det :-)
Jeg arbejder normalt med ASP, så med klient forstod jeg \'noget som ikke bliver eksekveret på serveren\' Select chekke opdatere køres alt sammen på serveren.
anyway, jeg forstår problematikken og jeg er næsten sikker på at det kan lade sig gøre i ren SQL...den vil jeg gå og grunde lidt over.
Ang. klient/server - vi mener det samme, jeg udtrykker det nok bare forkert. Det, jeg mener med at det køres fra klienten er, at f.eks. generering af en statement, hvor der står \"WHERE navn=\'Hans\'\" eller hvor kontrolstrukturer som f.eks. løkker bruges til at styre noget af processen.
proaccess >> jeg er bange for, at det ikke virker (mener bestemt, at LEFT JOIN på updates ikke er muligt i MySQL) - men jeg vil da få det prøvet i en fart :)
1) UPDATE Tabel1 INNER JOIN Tabel2 ON Tabel1.Navn = Tabel2.Navn SET Tabel1.Antal = [Tabel1].[Antal]+[Tabel2].[Antal]; 2) INSERT INTO Tabel1 ( Navn, Antal ) SELECT Tabel2.Navn, Tabel2.Antal FROM Tabel2 LEFT JOIN Tabel1 ON Tabel2.Navn = Tabel1.Navn WHERE (((Tabel1.Navn) Is Null)); 3) DELETE Tabel2.* FROM Tabel2;
Forklaring: 1 - lægger x antal til eksisterende navne 2 - tilføjer nye navne med antal 3 - tømmer tabel2
proaccess >> problemet med dine eksempler er, at de bærer præg af ikke at være lavet til mysql. De virker ikke, da mysql ikke understøtter bl.a. JOINsne på tabellerne og henvisninger til flere tabeller i updates.
lundsfryd >> du har fuldstændig ret, jeg arbejder normalt i Access, men det sidste forslag, jeg kom med, er da vist temmelig standard SQL... MEN desværre heller ikke godt nok til MySQL...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.