Avatar billede jpi Mester
04. september 2003 - 10:31 Der er 10 kommentarer og
1 løsning

Sammenligne tabeller

Jeg skal sammenligne to tabeller vha ASP.

Hvordan gør man det nemmest ?
Da det skal gøres på en del tabeller der indeholder mange kolonner skal det ikke være noget hvor man sammenligner hver værdi, men snarere hele posten.

Jeg har prøvet det følgende:
Test1.Open "SELECT..."
Test2.Open "SELECT..."

If Test1 <> Test2 then
...
end if

men den fejler på if-linien.
Man kan åbenbart ikke sammenligne de to på den måde, men hvordan gør man så ???
Avatar billede jpi Mester
04. september 2003 - 10:33 #1
Der mangler en while not Test1.EOF og en MoveNext og Wend i mit eksempel, men det virker stadig ikke...
Avatar billede d4s Novice
04. september 2003 - 23:01 #2
Du skriver ikke hvilken type db du bruger (Access, mysql, mssql, oracle,...).
Du skriver ikke om det er antal poster eller de enkelte poster du vil sammenligne.

Hvis du vil sammenligne om antallet af poster er ens, kan du bruge count(*) på begge databaser.

ellers:
http://dbforums.com/arch/4/2003/2/694207
http://www.mssqlcity.com/FAQ/Admin/CompareDB.htm
http://red-gate.com/sql_tools.htm#1

http://www.kandu.dk/dk/tip/878 (indsat nedenunder)
Jeg havde brug for at sammenlige to tabeller t1 og t2 og finde de id'er
som var i t1, men ikke t2. Jeg brugte dette lille SQL

Select ID, Navn
from table1 t1
where not exists (select Select ID
                      from table2 t2
                      where t1.ID = t2.ID)

Håber du kan bruge noget af det.

D4
Avatar billede jpi Mester
05. september 2003 - 10:54 #3
Jeg bruger en Access-database
Det jeg skal sammenligne er posterne.

Jeg har 2 database-filer og jeg skal finde de ændringer der er sket i den ene af filerne. Både nye entrys (det kan jeg selv finde ud af vhs. ID-sammenligning), men også indholdet i de enkelte poster.

Umiddelbart kan jeg ikke finde noget jeg kan bruge i de links du har sendt...
Avatar billede d4s Novice
08. september 2003 - 11:04 #4
Kan du bruge noget i denne stil til at finde dubletter? Ellers kan du bruge inner join, men jeg er ikke sikker på at access understøtter det. Det hører vist nok til MySQL.

' vælg alle poster i test1
sql="select * from test1"
set rs=conn.execute(sql)
do while not rs.eof and not rs.bof
  ' Undersøg om posten også findes i test2
  sql="select * from test2 where felt1='" & rs("felt1") & "' and felt2='" & rs("felt2") & "'"
  set rs2=conn.execute(sql)
  if not rs2.eof and not rs2.bof then
    'fundet en post magen til
  else
    'Posten findes ikke i test2
  end if
  rs2.close
  rs.movenext
loop
rs.close
set rs=nothing
Avatar billede jpi Mester
08. september 2003 - 11:38 #5
Det du sammenligner er om en post findes i begge tabeller. Det har jeg fundet ud af, men mit problem er om der er sket ændringer inde i posten (f.eks. ændret en tekst eller et tal...)
Avatar billede d4s Novice
08. september 2003 - 21:44 #6
Jeg forstår ikke hvad du mener. Kan du give et eksempel på indholdet af dine tabeller og på hvad der kan være ændret i den ene?
Avatar billede jpi Mester
09. september 2003 - 08:14 #7
Et eksempel:

Tabel indeholder en post med følgende data:
ID = 2
Navn = Søren
Medlem = Ja

Den tilsvarende Tabel i den anden databasefil indeholder en post med følgende data:
ID = 2
Navn = Søren
Medlem = Nej

Det er altså medlem-feltet der har skiftet indhold i den ene fil. Og denne post skal så vises.
Avatar billede d4s Novice
09. september 2003 - 21:07 #8
Vælger alle poster med samme id nummer, hvor enten navn eller medlem er forskellig i de to tabeller:

sql="select tabel1.*, tabel2.* from tabel1 inner join tabel2 on tabel1.id=tabel2.id where not tabel1.medlem=tabel2.medlem or not tabel1.navn=tabel2.navn"
Avatar billede d4s Novice
09. september 2003 - 21:15 #9
Hvis inner join ikke virker til access, kan du måske bruge denne side. Jeg har droppet access for et år siden og husker det ikke mere.
http://www.techonthenet.com/Access/Queries/unmatched.htm

D4
Avatar billede jpi Mester
10. september 2003 - 08:45 #10
Det er ikke noget problem for mig at sammenligne alle poster i to tabeller en værdi ad gangen.

Men da det skal gøres på en del tabeller der indeholder mange kolonner skal det ikke være noget hvor man sammenligner hver værdi, men snarere hele posten.

Jeg har nok 30 tabeller med hver mellem 20 og 30 kolonner i hver, så det ville kræve alt for meget tastearbejde, og som ikke kan bruges igen, når blot der ændres en lille smule ved databasestrukturen.
Avatar billede jpi Mester
02. juni 2004 - 14:33 #11
Luker
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