Ardonaiel
05.10.09,20:14
Ahojte,

opäť prosím o radu =o) ...potrebujem vytvoriť odstraňovací dotaz duplicitných záznamov z jednej tabulky. Mám dotaz ktorým zobrazím duplicitné hodnoty:

SELECT Pole1, Pole2, Pole3, Count(*) AS pocet
FROM Tabulka
GROUP BY Pole1, Pole2, Pole3
HAVING Count(*)>1

ale keď ich chcem odstrániť tak sa zobrazí hláška, že: dáta sú určené len pre čítanie. Skúšal som tento dotaz zmeniť na odstraňovací ale tiež to nešlo.

vopred ďakujem
Pidgey
05.10.09,20:17
no, takto narychlo neviem,ale ak by si ich dal tak odstranit ako pises, mam pocit, ze odstranis vsetky tie zaznami, cize vsetky duplicity, vratane aj toho jedneho prvotneho zaznamu (cize s tymi hodnotami ti uz nezostane ziaden zaznam). Neviem ci pojde urobit taky dotaz, aby to vsetko sparvil v jednom kroku, ja by som skor vyuzil nejake dalsie polia v tabulke, ktorym by som priradil nejaku hodnotu na zaklade toho ze count > 1 anasledne by som som dal vymazat vsetky zanamy z tej tabulky s danym vyrazom okrem zanamu s najnizsim poradovym cislom (aby s ami nevymazali vsetky zaznami duplicit ako som pisla na zaciatku.
Teda, len nahlas rozmyslam....najprv by som spravil vytvaraci dotaz, ktory by mi zobrazil tieto duplicitne vyrazy, nasledne by som spravil aktualizacny dotaz, ktory by priradil istu hodnotu "X" do isteho pola (na to urceneho v tabulke Tabulka) - s vazbami medzi pole 1, 2, 3, cize oznaci iba tym riadkom, kde su vsetky tie tri hodnoty zhodne-nase duplicity.Nasledne by som spravil dotaz, ktory by mi vymazal vsetky riadky s danou hodnotou "X" a napr s max poradovym cislom v tabulke (hodnota ID napr, alebo nieco co tam take mas). a tento postup opakoval dovtedy, pokial by dotaz, ktory vytvara tabulku s duplicitami nejake duplicity nachadzal. Myslim, ze vsetko toto by sa dalo nahodit do makra, aby to clovek nemusel X krat po sebe spustat...
:) mozno je aj jednoduchsi sposob, ja pisem to co poznam....sorac za preklepy...

nechce sa mi to mazat,ale uz teraz viem ze je to blbost co som napisal....teda v tom dotaze, ktory by to mal mazat.Problem vidim v tom priradeni hodnoty, nakolko kazda duplicita by mala mat jedinecnu hodnotu. Asi nastavit priradovanie hodnoty X+1 (ak take nieco funguje), a potom to nejako zapracovat do toho mazania. Kurna, nejako sa v tom zamotavam :) Mozno ma zajtra nieco ine napadne. Ospravedlnujem sa ak som zbytocne zamotal hlavu
Pidgey
05.10.09,22:05
No, nasiel som tento link http://office.microsoft.com/cs-cz/access/HA010345581029.aspx?pid=CL100570041029
tam je troska o tom pisane a pisu tam prave opacny postup, ze sa nedaju vymazat duplicity,ale ze sa to robi do novej tabulky cez pridavaci dotaz. Mna napadlo zjednodusit ten moj postup tak, ze v prvom kroku by som vytvoril dotaz (nemusi byt vytvaraci) a do selektu by som doplnil aby mi vypisalo aj maximalnu hodnotu pri duplicite z pola ID. Tento selekt by som spojil s povodnou tabulkou s vazbou cez ID a dal zobrazit vsetky zaznamy s Tabulky. Potom ich vies , minimalne po zobrazeni rucne, vymazat. Len, ten selekt s tou vazbou cez ID musis robit dotedy, pokial sa ti zobrazuju nejake data. Zial neprisiel som na sposob, ako dotazom vymazat cely zaznam z nejakej tabulky (hodnoty z poli hej,ale nie cely zaznam...). Ak by taky nejaky sposob bol, dalo by sa to dat cele do makra.
Ardonaiel
06.10.09,08:43
Pidgey, vďaka. Urobil som to podľa toho návodu čo si poslal link, aj to je pre mňa riešenie =o)
sthruska
06.10.09,08:44
Ja by som použil tú dočasnú tabuľku. Viackrát som čítal o podobných úlohách (bez rozdielu DB) a skoro vždy to bolo pomocou tabuľky.
Pidgey
06.10.09,11:52
No, rad som pomohol. Neskor ma napadlo, ten postup ako som pisal, teda vyselektovat vsetky duplicity spolu s info o najnizsom ID (alebo max ID). Potom by som urobil dotaz z vazbou s polami 1,2,3 a dal vsetky oznacit, a potom by som urobil dotaz s vazbou cez ID a tam by som oznacenie zrusil, cize by ostali oznacene iba nadbytocne duplicity.Potom by sa to dalo hromadne jednym vrzom vymazat, manualne. Odbobne by sa to dalo pouzit tak ze tie neoznacene by sa cez pridavaci dotaz nahadzali do novej tabulky,ale to uz je cca ten isty postup ako misali na microsofte. Ten postup cez pridavaci dotaz by mne osobne vadil nakolko vzdy pracujem s ID, cize jedinecnym identifikatorom zaznamu, automatickym cislom, co sa mi pri pridavacom dotaze asi neprenesie a vznikne novy
sthruska
07.10.09,05:00
//Ten postup cez pridavaci dotaz by mne osobne vadil nakolko vzdy pracujem s ID,
Aj to sa dá pomocou dočasnej tabuľky. Jednoducho z originálnej tabuľky vymažeš všetky záznamy, ktoré nie sú v dočasnej.