03. november 2003 - 14:40Der er
12 kommentarer og 1 løsning
Query - skal køre en tabel op i mod en anden
Hej! Jeg har en tabel med 3 felter: POSTCD HUSCD NAVN 2300 10 Pedersen 2200 20 Olsen Jeg vil lave: POSTCD HUSCD NAVN OK 2300 10 Pedersen Ja 2200 20 Olsen Nej
Jeg har en anden tabel med postcd og huscd som er OK/Ja - hvordan laver jeg den nye tabel så der hvor der ikke er match står der Nej og der hvor der er match Ja ?
Ok, prøver. Jeg har 2 tabeller: POSTCD HUSCD NAVN 2300 10 Pedersen 2200 20 Olsen 2200 22 Madsen ialt 256 poster POSTCD HUSCD OK 2300 10 Ja 2200 20 Ja Ialt 56 poster Jeg vil lave en ny tabel - som den første - men med en ny kolonne som skriver om OK ud for de poster som er ens. Jeg har lavet en query og der får jeg en tabel kun med 56 poster. Men jeg vil have en med 256 poster og et Ja ud for de poster som er OK
1a: Du har en tabel her kaldet TabelAlle med felterne POSTCD HUSCD NAVN til denne tabel tilføjer du et nyt felt OK. Du har en tabel her kaldet TabelOk med felterne POSTCD HUSCD OK
Løsning: UPDATE TabelAlle INNER JOIN TabelOk ON ([TabelAlle].[HusCD]=[TabelOk].[HusCD]) AND ([TabelAlle].[PostCD]=[TabelOk].[PostCD]) SET TabelAlle.Ok = Yes;
1b: Du har en tabel her kaldet TabelAlleGammel med felterne POSTCD HUSCD NAVN Du har en tabel her kaldet TabelOk med felterne POSTCD HUSCD OK
Løsning: Du tager en kopi af TabelAlleGammel med struktur og data og kalder den TableAlle Til tabelAlle tilføjer du et felt OK kør samme forespørgsel som e 1a: UPDATE TabelAlle INNER JOIN TabelOk ON ([TabelAlle].[HusCD]=[TabelOk].[HusCD]) AND ([TabelAlle].[PostCD]=[TabelOk].[PostCD]) SET TabelAlle.Ok = Yes;
2: Du har en tabel her kaldet TabelAlleGammel med felterne POSTCD HUSCD NAVN Du har en tabel her kaldet TabelOk med felterne POSTCD HUSCD OK
Løsning: Du tager en kopi af TabelAlleGammel kun strukturen og kalder den TableAlle Til tabelAlle tilføjer du et felt OK Kør forespørgslen: INSERT INTO TabelAlle ( PostCD, HusCD, Navn, Ok ) SELECT TabelAlleGammel.PostCD, TabelAlleGammel.HusCD, TabelAlleGammel.Navn, TabelOk.Ok FROM TabelAlleGammel INNER JOIN TabelOk ON (TabelAlleGammel.HusCD = TabelOk.HusCD) AND (TabelAlleGammel.PostCD = TabelOk.PostCD);
I Alle tilfælde bliver resultatet af TableAlle:
PostCD HusCD Navn Ok 2300 10 Pedersen Ja 2200 20 Olsen Ja 2200 22 Madsen Nej
Jeg ved ikke lige hvad der ske med min formatering håber det kan læses alligevel.
2: Opretter kun de rækker hvor der findes en række i begge tabeller. Den rigtige løsning er:
INSERT INTO TabelAlle ( PostCD, HusCD, Navn, Ok ) SELECT TabelAlleGammel.PostCD, TabelAlleGammel.HusCD, TabelAlleGammel.Navn, TabelOk.Ok FROM TabelAlleGammel LEFT JOIN TabelOk ON (TabelAlleGammel.HusCD = TabelOk.HusCD) AND (TabelAlleGammel.PostCD = TabelOk.PostCD);
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.