Avatar billede verakso Nybegynder
09. september 2008 - 11:01 Der er 6 kommentarer og
1 løsning

Update med joins?

Hejsa

Når man ikke daglig snakker SQL, så bliver man rusten, så derfor må jeg bede eksterterne om hjælp til denne simple operation

Jeg har to tabeller Company & Users
Da der ligger en del renundante data i Users ex. companyphone, address, postalcode og city, ville jeg gerne flytte dem op op Company.

Jeg har forsøgt et par forskellige tiltag eks.
update company
set postalcode = (SELECT DISTINCT users.postalcode
FROM company INNER JOIN
    users ON company.ID = users.FK_company)

Men det fejler.

Så hvordan updatere jeg Company, med de værdiere fra Users. Udfordringen ligger jo i, at data ligger flere gange, da der er flere users knyttet til et company.
Avatar billede aaberg Nybegynder
09. september 2008 - 11:36 #1
prøv

update company
set postalcode = (select distinct users.postalcode
    from users
    where users.FK_company = company.ID)

Den går dog ud fra at alle users som er tilknyttet et firma, har registreret samme postnummer. Hvis dette ikke er tilfældet, vil queryen fejle.
Avatar billede verakso Nybegynder
09. september 2008 - 11:48 #2
Okay, det kunne være årsagen til at det fejler:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

Det er nemlig ikke sikkert at ALLE brugeren er oprettet med de identiske data. Måske jeg blot skulle lave en SELECT TOP 1

Jeg vil selvfølgelig implicit så altid tage data fra den første user, men skidt pyt - det kan jeg leve med.

Tak for lige at forklare, hvorfor den fejlede....
Avatar billede michaelthomsendk Nybegynder
09. september 2008 - 11:49 #3
Hej

Ønsker du at rette alle posterne i company?
Ønsker du at tage data fra en tilfældig user i det company?

Jeg behøver vel ikke sige min mening om "renundante" data :-)
Men når du har det sådan, ville det så ikke være bedre at opdatere users ud fra company?
Avatar billede aaberg Nybegynder
09. september 2008 - 12:13 #4
Man kan sikkert lave en sql query som tager det postnummer som optræder flest gange, men det går hen og bliver småkompliceret!
Avatar billede verakso Nybegynder
09. september 2008 - 12:25 #5
Det er jo for at rydde op, og det er et skridt i den rigtige retning at flytte redundante data fra users op op company.

Det er step 1.
Step 2, bliver så at tjekke om data stadig er valide, der kan jo være firmaer der er flyttet eller har ændret navn. Men vi kan vist alle være enige om, at det ikke giver mening at lade adressen side på brugeren.
Avatar billede verakso Nybegynder
07. januar 2009 - 10:48 #6
Kære hr. aaberg_cc - mange tak for input, smider du et svar så jeg kan lukke?
Avatar billede aaberg Nybegynder
07. januar 2009 - 12:32 #7
:-)
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