Avatar billede foralias Praktikant
24. maj 2006 - 09:23 Der er 14 kommentarer og
1 løsning

Sammenligne to tabeller

Jeg har to tabeller hvori der er 1 kolonne (initialer) som jeg gerne vil have sammenlignet.
Jeg vil gerne have en melding hvis dataene i initialer i tabel 1 ikke eksistere i tabel 2.
Hvordan gør man det?
Jeg har prøvet med do - loop, While - Wend og for - next.
Men jeg kan kun få den til at tage første record i tabel 1.
Avatar billede tdafoobar Nybegynder
24. maj 2006 - 09:32 #1
øhh, hvilken database drejer det sig om?
Avatar billede foralias Praktikant
24. maj 2006 - 09:33 #2
:-) access - Sorry
Avatar billede softspot Forsker
24. maj 2006 - 09:36 #3
noget med

SELECT count(t1.*) AS cnt_no_relation
FROM tabel1 AS t1
LEFT JOIN tabel2 AS t2 ON t1.initialer = t2.initialer
WHERE t2 IS NULL
Avatar billede softspot Forsker
24. maj 2006 - 09:38 #4
sorry, mangler lige feltnavnet i where-delen:

SELECT count(t1.*) AS cnt_no_relation
FROM tabel1 AS t1
LEFT JOIN tabel2 AS t2 ON t1.initialer = t2.initialer
WHERE t2.initialer IS NULL

Antallet skulle så kunne aflæses i rs("cnt_no_relation") - forudsat dit resultat ligger i en variabel der hedder rs :)
Avatar billede foralias Praktikant
24. maj 2006 - 09:52 #5
Det er ikke antallet jeg skal bruge.
Hvis initialer i tabel 1 ser sådan ud:
ab
bc
cd
de
ef

og initialer i tabel 2 ser sådan ud:

ab
cd
de

Så skulle den gerne returnere bc og ef, da disse ikke eksistere i tabel 2
Avatar billede softspot Forsker
24. maj 2006 - 09:54 #6
Jamen, så fjerne du jo bare count:

SELECT t1.initialer
FROM tabel1 AS t1
LEFT JOIN tabel2 AS t2 ON t1.initialer = t2.initialer
WHERE t2.initialer IS NULL
Avatar billede foralias Praktikant
24. maj 2006 - 10:08 #7
Endnu en forglemmelse. Jeg glemte at fortælle at tabellerne ligger i to forskellige databaser. (Det er ikk' sårn når man er NB i det her)

Den kode du skriver hvor skal den stå?
Avatar billede softspot Forsker
24. maj 2006 - 10:56 #8
Jeg mener det er muligt at forespørge i to forskellige database i samme SQL, men kan ikke lige huske hvordan. Jeg kigger lige. Indtil da kan jeg jo besvare det andet, nemlig med: SQL-sætningen skal ligge der hvor du skal bruge den ;-)

Eksempel:

sql = "SELECT t1.initialer " & _
      "FROM tabel1 AS t1 " & _
      "LEFT JOIN tabel2 AS t2 ON t1.initialer = t2.initialer " & _
      "WHERE t2.initialer IS NULL"
set rs = conn.Execute(sql)
' ...og så aflæsning af rækkerne...
' conn er naturligvis dit connectionobjekt til databasen
Avatar billede softspot Forsker
24. maj 2006 - 11:20 #9
Det lader til at man skal bruge flg. syntaks:

SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}
FROM tableexpression [, ...] [IN externaldatabase]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

Hvilket jeg tolker således i dit konkrete tilfælde:

sql = "SELECT t1.initialer " & _
      "FROM tabel1 AS t1 " & _
      "LEFT JOIN tabel2 AS t2 IN [c:\database\ekstern1.mdb] ON t1.initialer = t2.initialer " & _
      "WHERE t2.initialer IS NULL"

alternativt skal IN-delen hen foran tabel-alias, eller bare på den lange måde:

sql = "SELECT tabel1.initialer " & _
      "FROM tabel1 " & _
      "LEFT JOIN tabel2 IN [c:\database\ekstern1.mdb] ON tabel1.initialer = tabel2.initialer " & _
      "WHERE tabel2.initialer IS NULL"
Avatar billede foralias Praktikant
24. maj 2006 - 11:45 #10
Hmmmm. Fatter nada! Sorry.
Kan du skære det ud i pap?
Avatar billede softspot Forsker
24. maj 2006 - 12:16 #11
Du har en connection til en database (lad os sige den med tabel1) og så skal du slå op i database 2 (en ekstern databasefil, altså .mdb, antager jeg), det er den der indeholder tabel2. Så laver du den sidste forspørgsel jeg skrev:

sql = "SELECT tabel1.initialer " & _
      "FROM tabel1 " & _
      "LEFT JOIN tabel2 IN [c:\database\ekstern1.mdb] ON tabel1.initialer = tabel2.initialer " & _
      "WHERE tabel2.initialer IS NULL"


Hvor du naturligvis udskifter stien til din databasefil (det der i mit eksempel hedder c:\database\ekstern1.mdb) med den der peger på din eksterne database...
Avatar billede foralias Praktikant
20. september 2006 - 11:25 #12
Hej Softspot
Smid lige et svar. Så lukker vi her.
Jeg fandt en anden løsning, men du har ofret meget energi i at forsøge at lære mig det, derfor skal du have pts.
Avatar billede softspot Forsker
20. september 2006 - 21:13 #13
Det var så lidt :)

Jeg er lidt nysgerrig ;) - så jeg vil da gerne høre hvordan du løste opgaven, hvis du har lyst til at forklare...
Avatar billede foralias Praktikant
21. september 2006 - 09:14 #14
Den korte version er den at jeg bare lavede det hele om.
;-)
Avatar billede softspot Forsker
21. september 2006 - 09:33 #15
LOL! Ja, det kan mange gange give et bedre slutresultat :)
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
Kurser inden for grundlæggende programmering

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