Samenvoegen van tabellen

Status
Niet open voor verdere reacties.

guido1

Gebruiker
Lid geworden
3 sep 2004
Berichten
21
Hoi,

Ik moet met behulp van SQL de gegevens van twee MS-Access tabellen samenvoegen.

Voorbeeld van de tabellen:

velden tab1: a b c
waarden: a x x
b x x
c x x

velden tab2: a b c
waarden: a x x
c x x
d x x

SQL die ik nu gebruik:
SELECT tab2.a, tab2.b, tab2.c
FROM tab1 RIGHT JOIN tab2 ON tab1.a = tab2.a
WHERE tab2.a not in (select tab1.a from tab1);

Bovenstaande query levert een lijst van items die in tab2 voorkomen en niet in tab1. Voor tabellen met enkele records werkt dat goed maar wanneer het gaat over een paar duizend records dan duurt de uitvoering véél te lang.

Iemand een idee hoe ik de query sneller kan maken?
Opvoorhand bedankt.

Guido
 
Hoi,

Dat er niemand hier een antwoord op weet kan ik niet geloven.

Hou je vooral niet in om mij een oplossing te bieden.

Guido
 
Dat is niet zo moeilijk hoor:

SELECT a b c
FROM tab1
UNION
SELECT a b c
FROM tab2
 
Hoi Bartuls,

Bedankt voor de reaktie en sorry dat ik nu pas reageer, ik ben nooit verwittigd dat er een reaktie was.

Maar zeg nu zelf, jou oplossing is toch geen oplossing. Met jou methode worden de tabellen gewoon samen gevoegd ongeacht wat de inhoud van de tabellen is.

Het voorbeeld dat ik opgegeven heb doet dat ook, ten minste als het volledig uitgewerkt is, dus ook met het union statement.

Het probleem dat ik heb is dat de uitvoeringstijd veel te lang wordt door die geneste select in mijn query. Dat was juist mijn vraag maar daar geef je ook geen antwoord op.

Guido
 
Oeps, vraag niet goed gelezen....

SELECT tab2.a, tab2.b, tab2.c
FROM tab1 RIGHT JOIN tab2 ON tab1.a = tab2.a
WHERE tab2.a not in (select tab1.a from tab1);

Als ik het goed begrijp wil je de records uit tab2 waarvoor geldt dat tab2.a niet voorkomt in tab1.a.

Dan is die right join helemaal niet nodig!

SELECT tab2.a, tab2.b, tab2.c
FROM tab2
WHERE tab2.a not in (select tab1.a from tab1);

Dit zal al een stuk sneller werken.
Als je dan ook nog zorgt dat er indexen liggen op tab1.a en tab2.a dan heb je alle optimalisaties gedaan die je kunt doen.
 
Hoi Bartuls,

Ik heb het ondertussen al uitgevoerd zoals in jou voorbeeldje. Maar het duurt nog altijd tabelijk lang.

Het is voornamelijk die geneste select die veel tijd vraagt en ik denk ooit ergens een oplossing gezien te hebben maar ik heb geen flauw idee meer waar. Als ik mij goed herrinner was dat opgelost met uitsluitend join's en zonder de geneste select.

Toch bedankt voor je reaktie.
Guido
 
Ik blijf het vreemd vinden dat het zo lang duurt. Een paar duizend records is niets voor access (tenzij je access 2.0 gebruikt!)
Ik heb zelf databases met tabellen met een paar 100.000 records erin met dergelijke constructies, daar geeft dat geen problemen!

Hoe zijn de velden tab1.a en tab2.a gedefinieerd?

Staan er ook indexen op die velden?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan