Avatar billede hrc Mester
14. maj 2008 - 12:30 Der 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?
Avatar billede Syska Mester
14. maj 2008 - 17:11 #1
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

Måske det kan give inspiration til dit problem.

// ouT
Avatar billede Syska Mester
14. maj 2008 - 17:12 #2
othercolif = othercolid ...

Jeg ved egentlig ikke hvad der sker hvis den join returnere 2 columns ...

// ouT
Avatar billede hrc Mester
15. maj 2008 - 08:28 #3
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.
Avatar billede Syska Mester
15. maj 2008 - 09:32 #4
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 )

Det må virke ... ellers sig til ...

// ouT
Avatar billede hrc Mester
15. maj 2008 - 13:39 #5
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)
Avatar billede Syska Mester
15. maj 2008 - 15:43 #6
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 ...

// ouT
Avatar billede Syska Mester
15. maj 2008 - 15:47 #7
Følgende virker på min database ...

UPDATE S SET S.Name = A.Name
FROM Servers AS S
INNER JOIN Alliances AS A ON A.AID = 143
WHERE S.SID = 1

I mit forige eksemple, skal du vist lige fjerne den ")" i 4 linje.
Avatar billede hrc Mester
16. maj 2008 - 08:26 #8
Elegant og simpelt, nu det er lavet. Tak for hjælpen (mangler et svar)
Avatar billede Syska Mester
16. maj 2008 - 13:42 #9
svar :-)

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.

// ouT
Avatar billede hrc Mester
17. maj 2008 - 20:39 #10
Det virker fint hos mig og er placeret i mit kodebibliotek.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester