14. maj 2008 - 12:30Der er
9 kommentarer og 1 løsning
Update vha. select
I SQL2000 vil jeg opdatere en borgers midlertidige adresse med en given boligs adresse. Altså noget i retning af dette:
update borger set madresse1 = bo.adresse1, madresse2 = bo.adresse2, postID = bo.postID from (select adresse1, adresse2, postID from bolig) as bo where (ID = 3) and (bo.ID = 62)
.. hvor 3 er borger.ID og 62 bolig.DI. Bemærk, de to tabeller hænger ikke sammen med en relation. Kan nogen hjælpe?
Jeg er ikke helt med på hvad du vil ... men følgende er lovlig.
UPDATE table1 SET col1 = (SELECT othercol1 FROM table2 WHERE othercolid = table1.othercolif) WHERE id = 2
Men den er måske knap så praktisk her ...
Følgende bruger jeg selv ... UPDATE V SET V.Population = X.Population FROM Villages V INNER JOIN x_world X ON V.SID = @SID AND V.VID = X.VID WHERE V.Population <> X.Population
Jeg kan også godt finde ud af at opdatere ét felt, men her er der tre felter der skal opdateres. Den nuværende, helt acceptable, løsning er at selecte de 3 værdier fra bolig-tabellen og derefter update de tre "midlertidig adresse"-felter i borgertabellen. Når man kan skrive én værdi må man da også kunne skrive 3 i en enkelt SQL-sætning.
Ja, men det kan du vel også fra mit sidste forslag ... du har jo 2 ens keys ... så må du jo kunne joine over på den anden, og deraf tage værdierne og smide tilbage til den oprindelige table ...
UPDATE B SET B.adr1 = A.adr2, B.adr2 = A.adr2 FROM bruger B INNER JOIN (join her på den anden table hvor dine data er) WHERE ( hvad der nu skal opfyldes )
Jeg forstår ikke helt dit forslag. De to nøgler er ikke ens. Den ene er et borgerid mens den anden er et bolig ditto. De to tabeller hænger ikke sammen med fremmednøgler (der er brugbare relationer andetsteds i databasen, men spørgsmålet har bevæget sig over i det SQL-teoretiske).
UPDATE borger SET madresse1 = b.adresse1, madresse2 = b.adresse2, mpostID = b.postID FROM bolig b INNER JOIN (hvad skal der lige stå her?) WHERE (borgerID = 3 and b.boligID = 63)
UPDATE B SET B.madresse1 = A.adresse1, B.madresse2 = A.adresse2, B.mpostID = A.postID FROM borger AS B INNER JOIN bolig AS A ON A.boligID = 63) WHERE B.borgerID = 3
Dette burde virke, hvis jeg har gennemskuet dine struktur ...
Smider da ikke svar før jeg er sikker ... men det er nemlig en skide smart måde. Bruger det selv ... :-) Dog til flere rækker ... men muligheder er mange.
Det virker fint hos mig og er placeret i mit kodebibliotek.
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.