Forum » Programiranje » [MS Access] distinct tabela iz miljon tabel
[MS Access] distinct tabela iz miljon tabel
gkovac ::
Stvar je sledeča:
Imam približno 500 tabel iz katerih moram spraviti kode v eno samo distinct tabelo. Zaenkrat to delam "ročno" za vsako tabelo posebej in se mi bo odtrgal. Ima kdo kakšno idejo kako to naredit hitreje?? HVala!
Imam približno 500 tabel iz katerih moram spraviti kode v eno samo distinct tabelo. Zaenkrat to delam "ročno" za vsako tabelo posebej in se mi bo odtrgal. Ima kdo kakšno idejo kako to naredit hitreje?? HVala!
lp,
____________________________________________
"Left to themselves, things tend to go from bad to worse."
____________________________________________
"Left to themselves, things tend to go from bad to worse."
gkovac ::
Ja struktura polj je enaka, imajo pa različna imena.
lp,
____________________________________________
"Left to themselves, things tend to go from bad to worse."
____________________________________________
"Left to themselves, things tend to go from bad to worse."
krneki0001 ::
Potem pa narediš en manjši program, ki prepiše iz ene tabele vsako vrstico samo po enkrat, potem pa iz vseh ostalih samo update teh vrstic delaš, če pa še ne obstaja v tabeli pa narediš insert podatkov.
Za vsako vrstico se ni treba spraševati, če že obstaja - avtomatično se sprašuješ po kodi napake. Probaš vsako vrstico narest update, pa ko dobiš kodo, da ta vrstica ne obstaja, potem narediš avtomatsko insert.
nekaj sql kod za napake
NOT-FOUND -> +100
FOUND -> +000
DATE1 -> -180
DATE2 -> -181
RESTART -> -601
DUPL-INDEX -> -803
DUPL-VALUE -> -811
REBIND -> -818
NEDOSEG -> -904
LOCK1 -> -911
LOCK2 -> -913
Pomoje da je to najhitrejša varianta.
Za vsako vrstico se ni treba spraševati, če že obstaja - avtomatično se sprašuješ po kodi napake. Probaš vsako vrstico narest update, pa ko dobiš kodo, da ta vrstica ne obstaja, potem narediš avtomatsko insert.
nekaj sql kod za napake
NOT-FOUND -> +100
FOUND -> +000
DATE1 -> -180
DATE2 -> -181
RESTART -> -601
DUPL-INDEX -> -803
DUPL-VALUE -> -811
REBIND -> -818
NEDOSEG -> -904
LOCK1 -> -911
LOCK2 -> -913
Pomoje da je to najhitrejša varianta.
gkovac ::
o madona nebivedu!!! pojma nimam kaj si mi zdele napisal sem čist lev kar se tega tiče (kakršnega koli programiranja). Vem da da se mi počas trga od kopiranja.
lp,
____________________________________________
"Left to themselves, things tend to go from bad to worse."
____________________________________________
"Left to themselves, things tend to go from bad to worse."
dudi ::
Probaj takole:
SELECT 'SELECT A, B FROM '+Name+' UNION' AS Expr1
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0));
A,B zamenjaj z imeni kolon, ki jih hičeš primerjat. Rekel si da so vsepovsod enake. Zgeneriralo ti bo 500 vrstic. Vse skupaj skopiraj v nov query in zaženi. Prej še zadnji vrstici pobriši besedo UNION. Naredilo ti bo distinct iz vseh tabel.
SELECT 'SELECT A, B FROM '+Name+' UNION' AS Expr1
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0));
A,B zamenjaj z imeni kolon, ki jih hičeš primerjat. Rekel si da so vsepovsod enake. Zgeneriralo ti bo 500 vrstic. Vse skupaj skopiraj v nov query in zaženi. Prej še zadnji vrstici pobriši besedo UNION. Naredilo ti bo distinct iz vseh tabel.
gkovac ::
dudi najprej hvala, ampak tole mi da čist nerazumljiv rezultat
da mal bolj razjasnim situacijo:
imam tabele B0010101, B0010102, in tako naprej do n
tabele imajo polja: BUY_CODE, ADDRESS, ZIP_CODE, PLACE
in zdej jaz najprej kreiram glavno (master) tabelo, kjer so distinct kode BUY_CODE (vse ostalo je samo nanašanje nanjo - naslov, poštna itd). Potem pa veselo delam unmatched query iz ostalih tabel in kar "ostane" kopiram v glavno tabelo... in tako dalje... kot sem že omenil se mi počas trga!
da mal bolj razjasnim situacijo:
imam tabele B0010101, B0010102, in tako naprej do n
tabele imajo polja: BUY_CODE, ADDRESS, ZIP_CODE, PLACE
in zdej jaz najprej kreiram glavno (master) tabelo, kjer so distinct kode BUY_CODE (vse ostalo je samo nanašanje nanjo - naslov, poštna itd). Potem pa veselo delam unmatched query iz ostalih tabel in kar "ostane" kopiram v glavno tabelo... in tako dalje... kot sem že omenil se mi počas trga!
lp,
____________________________________________
"Left to themselves, things tend to go from bad to worse."
____________________________________________
"Left to themselves, things tend to go from bad to worse."
dudi ::
Lej,
Query prirediš svojim potrebam, se pravi:
SELECT 'SELECT BUY_CODE, ADDRESS, ZIP_CODE, PLACE FROM '+Name+' UNION' AS Expr1
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0));
Ta query zaženeš.
Naredi pa to, da se sprehodi skozi vse tabele ki jih imaš v bazi in za vsako od teh tabel generira SELECT stavek.
Se pravi, dobiš toliko vrstic, kolikor je tabel v tvoji bazi. Npr:
SELECT BUY_CODE, ADDRESS, ZIP_CODE, PLACE FROM Table1 UNION
SELECT BUY_CODE, ADDRESS, ZIP_CODE, PLACE FROM Table2 UNION
...
...
Te vrstice skopiraš in jih zaženeš v novem queryu. Kot vidiš ima vsaka vrstica na koncu stavek UNION. Ta stavek ti izvede distinct operacijo med dvema tabelama oz, v tvojem primeru vseh tabel. Kot rezultat dobiš filtrirane vrstice iz veh tabel. Ne pozabi pobrisati zadnjega UNION-a, ker ti bo sicer javilo napako.
Query prirediš svojim potrebam, se pravi:
SELECT 'SELECT BUY_CODE, ADDRESS, ZIP_CODE, PLACE FROM '+Name+' UNION' AS Expr1
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0));
Ta query zaženeš.
Naredi pa to, da se sprehodi skozi vse tabele ki jih imaš v bazi in za vsako od teh tabel generira SELECT stavek.
Se pravi, dobiš toliko vrstic, kolikor je tabel v tvoji bazi. Npr:
SELECT BUY_CODE, ADDRESS, ZIP_CODE, PLACE FROM Table1 UNION
SELECT BUY_CODE, ADDRESS, ZIP_CODE, PLACE FROM Table2 UNION
...
...
Te vrstice skopiraš in jih zaženeš v novem queryu. Kot vidiš ima vsaka vrstica na koncu stavek UNION. Ta stavek ti izvede distinct operacijo med dvema tabelama oz, v tvojem primeru vseh tabel. Kot rezultat dobiš filtrirane vrstice iz veh tabel. Ne pozabi pobrisati zadnjega UNION-a, ker ti bo sicer javilo napako.
gkovac ::
dudi tole dela ko šus! thnx in plačam piwo ob prvi priliki!
edin en dodatek: error: Query is too complex ampak se bom že znajdu
edin en dodatek: error: Query is too complex ampak se bom že znajdu
lp,
____________________________________________
"Left to themselves, things tend to go from bad to worse."
____________________________________________
"Left to themselves, things tend to go from bad to worse."
Zgodovina sprememb…
- spremenil: gkovac ()
dudi ::
No, fino Napako ti javi ker je query najbrž predolg. Razbij ga na več manjših pa potem še iz tistih naredi en distinct pa je.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | MS Access (strani: 1 2 )Oddelek: Programiranje | 7438 (5496) | travica |
» | [Access 2007]Oddelek: Programiranje | 2639 (2239) | urosz |
» | [SQL] InsertOddelek: Programiranje | 2088 (1690) | greentech |
» | MySQL join problemOddelek: Programiranje | 1547 (1445) | Poldi112 |
» | Kako v accessu najti polje, ki je daljše od 4 znakov?Oddelek: Programiranje | 1196 (1094) | ToniT |