Avatar billede diz Nybegynder
04. november 2003 - 15:33 Der er 12 kommentarer og
1 løsning

Sammenligning af tabeller

Hejsa,

Min problemstilling:
Jeg har en database over medlemmer i et system.
En gang om ugen modtager jeg en CSV-fil med data over medlemmer fra en ekstern kilde. Jeg skal så sammenligne min databasetabel (members) med CSV filen og slette alle de medlemmer i min tabel som ikke er i CSV-filen. Samtidigt skal jeg tilføje alle de medlemmer der er i CSV-filen, men ikke i databasen. Felterne i CSV-filen er ikke de samme som i databasen, men et enkelt felt er primærnøgle i begge.

Well, måden jeg har tænkt mig at gribe problemet an på er:

- Importere csv-filen i en ny tabel kaldet 'nye'.

- Fjerne alle fra min gamle tabel med sql-sætningen: DELETE FROM members WHERE memid NOT IN (SELECT medlemsnr AS memid FROM nye);

Nu er problemet så bare at jeg skal flytte alle de medlemmer som er i 'nye' over i 'members'. Er der nogen der kan hjælpe med dette?
Eller måske komme med en helt anden løsning :)

/Sune
Avatar billede arne_v Ekspert
04. november 2003 - 16:24 #1
INSERT INTO members SELECT * FROM nye WHERE memid NOT IN (SELECT memid FROM members);
Avatar billede arne_v Ekspert
04. november 2003 - 16:24 #2
Hvad version af MySQL bruger du ?

(NOT IN er et problem i ældre versioner !!)
Avatar billede diz Nybegynder
04. november 2003 - 19:41 #3
jeg mener det er 3.27
Avatar billede diz Nybegynder
04. november 2003 - 19:57 #4
3.23
Avatar billede arne_v Ekspert
04. november 2003 - 20:00 #5
Virker NOT IN ?
Avatar billede diz Nybegynder
04. november 2003 - 22:04 #6
Testede lige følgende:

SELECT * from members where memid not in (select memid from members)

Giver følgende fejl:

"You have an error in SQL syntax near 'select memid from members)' at line 1"

Så det gør det vist ikke...
Avatar billede diz Nybegynder
04. november 2003 - 22:14 #7
Men nedenstående finder vel også alle som er i 'nye' men ikke i 'members :

SELECT nye.* FROM nye LEFT JOIN members ON nye.memid = members.memid WHERE members.memid IS NULL;

og alle som er i 'members', men ikke i nye kan findes med :

SELECT members.* FROM members LEFT JOIN nye ON members.memid = nye.memid WHERE nye.memid IS NULL;
Avatar billede arne_v Ekspert
04. november 2003 - 22:16 #8
Ja.
Avatar billede diz Nybegynder
04. november 2003 - 22:19 #9
men hvordan får ejg dem så lavet om til henholdsvis DELETE og INSERT INTO statements...Den kan jeg ikke lige gennemskue :(
Avatar billede arne_v Ekspert
04. november 2003 - 22:24 #10
Du bør kunne lave:

INSERT INTO tabel SELECT ...
Avatar billede arne_v Ekspert
04. november 2003 - 22:24 #11
DELETE er mere problematisk
Avatar billede arne_v Ekspert
16. november 2003 - 22:14 #12
OK ?
Avatar billede diz Nybegynder
21. marts 2004 - 17:08 #13
lukker...
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