Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mozgalica: Poređenje dve tabele

[es] :: Access :: Mozgalica: Poređenje dve tabele

[ Pregleda: 5480 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Mozgalica: Poređenje dve tabele27.07.2010. u 19:10 - pre 167 meseci
Ova mozgalica zasluzje da se nadje na forumu Baze Podataka, ali hocu prvo da je postavim ovde, jer je lakse da se nparavi primer .

Kako uporediti dva skupa podataka za koje ocekujemo da budu identicni? U nasem slucaju, set podatka je skup kolona iz dve tabele ili dva kverija koje zelimo da uporedimo.

Pre nego pokusamo da resimo zadatka, da razjasnimo sta znaci 'dve identicna skupa podatka'. Da bi poredili dva skupa podatka, oni moraju biti uporedivi, da ne poredimo babe i zabe. Trebaju nam dakle uslovi uporedivosti. Onda nam trebaju uslovi jednakosti.

Uslovi uporedivosti. Dva skupa podatka su uporeidva ako
- oba skupa imaju isti broj kolona
- odgovarjuce kolone su istog tipa
- odgovarjuce kolone mogu, ali i ne moraju da imaju ista imena

Uslovi jednakosti. Dva skupa podatka koji zadovoljavaju uslove uporedivosti, jednaka su ako i samo ako:
- imaju isti broj redova
- za svaki red jednog skupa mora postojati red koji je isti, kolona po kolona

Uslovi jednakosti na prvi pogled iskljucuju duplikate, ali nije tako. Ako svaki skup ima neki duplicirani red, i taj se red nalzi u istom broju u drugom skupu, ond aje sve OK. Na priemr, imate skup (tabelu) od 10 identicnih redova. Ako druga tabela ima istih 10 identicnih redova, te dve tabele su identicne. medjutim, ako prvi skup iam 11 identicnih redova, a drugi ima 10 ili 12 istih takvih redova, onda skupovi nisu identicni.


Ajde da probamo. U zakcenom primeru dao sam dve tabele, Tabela_A i Tabela_B. Tabele imaju sledece kolone:
{ID, Company, Lname, Fname, Job, Phone City, Komentar}
ID necemo upotrebljavati, jer se razlikuje u dve tabele (tako je to kad se koristi Autonuber
Komentar necemo uporedjivati, tamo sam ja opisao st je u nekom redu razlicito od odgovarajuceg reda u drugoj tabeli.

Hocemo da uporedimo kolone {Company, Lname, Fname, Job, Phone City} u tabelama Tab_A i Tab_B. Uslovi uporedivosti su zadovoljeni, kolone su istog tipa, i u nasem slucju imaju iste nazive. Table eizgledaju ovako:


Zadatak:
a) Na osnovu uslova jednakosti brzo zakljuciti da li tabele A i B sadrze identicne redove, ako se ogranicimo na pomenuti skup kolona. Koji kveri, ili vise kverija, bi dali odgovor na ovo pitanje? Odgovor je Da ili Ne.

b) Kad utvrdimo da skupovi podatka koje uporedjujemo nisu identicni, napisati kveri koji pokazuje razlike. Razlike su:
Svi redovi koji se nalaze u jednoj od tablea, a nema ih takvih istih u drugoj tabeli.

Napisati kveri koji pokazuje sve razlike = redove koji se nalaze u ejdnoj tabeli, a nema ih istih takvih u drugoj. Ako je neki red u jednoj tabeli ponovljen vise puta a nema ga toliko puta u drugoj tabeli, i to treba prikazati.

Zadatak nije jednostavan, ali ni mi nismo od juce

Resenje treba da vrati sledece redove, u bilo kom redosledu:


Ako imate odgovor, zakacite Access fajl sa svim kverijima koje ste napravili i u tekstu poruke kazite nam koji kveri daje odgovor na koje pitanje.
Prikačeni fajlovi
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 20:10 - pre 167 meseci
Da li je bitan cilj ili postupak?
Pozdrav,
Branislav
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 20:20 - pre 167 meseci
Q: Da li je bitan cilj ili postupak?

A: Postupak, ali tako da dovede do cilja. Znaci, kveri koji vraca isto sto sam i ja dobio. Ako ne moze kveri, moze i punjenje tabele kodom. Sve osim gledanja u tabelu ocima i rucno izdvajanje nepodobnih redova.

Moze i kombinacija, recimo kveri koji pronalazi jednu kalsu nejednakih redova, plus drugi kveri koji pronalazi neku drugu klasu, pa onda kod koji resi sve ostalo. Veujem da je moguce napisati kveri koji pronalazi ono sto nije u A a jeste u B. Pa onda jedan gde vidimo sta je u B ali nije u A. Ostaje da se resi pitanje duplikata - ako se neki red pojavljuje u A N puta a u B m puta, m<>n.



 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
212.178.241.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 20:34 - pre 167 meseci
Da li ste na ovo mislili?
Prikačeni fajlovi
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 20:40 - pre 167 meseci
Ma ja bih to jednostavno - napravim treću tabelu sa uključenim indeksima (bez ponavljanja) i onda sa dva append upita prebacim podatke iz obe tabele u tu novu.
Pozdrav,
Branislav
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 21:21 - pre 167 meseci



@Zoran: bravo, to je bilo brzo, nisam ocekivao ovako brz odgovor. Na prvi pogled deluje dobro, ali cu morati da proanaliziram jos, za slucaj da negde cuci neka skrivena zamka.

Za prvi deo pitanja, da li su tabele iste, da ili ne, odgovor je ocigledno 'Ne' - nemaju isti broj redova, pa ne mogu biti iste. Za taj odgovor potrebna su nam dva brojanja, broj redova u jednoj tabeli i broj redova u drugoj tabeli. Ako su ova brojanja razlicita, onda su tabele zasigurno razlicite. Medjutim, ako su brojanja ista, ne znaci da su tabele identicne.

Drugi deo prati logiku koja deluje OK, nadji razliku zimedju tabela i onda dodaj one koji se javljaju nejednak broj puta.

@ Banem: ideja je OK, zasto da ne, samo nam treba potvrda da ce to zaista tako da radi. Napravi tabelu i napuni je, uz opis postupka ili sacuvaj append kverije. Objasni kako napravis unique index, po kojim kolonama i zasto. pazi, cilj je da pokazes redove koji nisu OK, ne da se pokaze sta je jednako medju tabelama.

Da sacekamo jos malo, pa cu i ja moje resenje da postavim. Sto vise razlicitih ideja dobijemo, to bolje.

 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
212.178.241.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 21:36 - pre 167 meseci
Evo uradih i prvi deo zadatka koji sam drugacije u prvom trenutku shvatio... :-)
Prikačeni fajlovi
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 21:42 - pre 167 meseci
Na žalost sad radim na dva projekta, pa nemam vremena za to, ali ideja je da se dobije jedinstven skup podataka koliko razumem. Čak ne mora ni upit, može i copy & paste u novu tabelu. Da pojednostavim sa dve tabele:

Prva
1
1
3
4
5

Druga
1
2
4
5
6

Treća, postavi se Indexed: Yes (No Duplicates) i iskopira sadržaj iz obe, razultat je:

Treća
1
2
3
4
5
6
Pozdrav,
Branislav
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: Poređenje dve tabele27.07.2010. u 22:04 - pre 167 meseci
Q:"ali ideja je da se dobije jedinstven skup podataka koliko razumem. "
A: pogresno, nije ideja da se od dve tabeel napravi treca sa jedinstvenim redovim. Zadatak je da se
a) odgovori sa DA ili NE na pitanje 'da li su tabele identicne'
b) pokazu razlike izmedju dve tabele - redovi iz jedne i druge koji ne dozvoljavaju da tabele budu identicne. Identicnost ili jednakost tabela je definisana u postavci zadatka.

Za primer koji si dao, jedna tabela sa jednom kolonom, rezultat bi bio:

razlika izmedju (1,1,3,4,5) i (1,2,4,5,6) jeste (1,3,6)

Znaci, nije cilj da se ocistte podaci i dobije treca, cista tabela. Cilje je dase izlistaju razlike , gde smo razlicitost i istovetnost definisali zadatkom.
 
Odgovor na temu

izonic
ishab zonic
Tuzla

Član broj: 38128
Poruke: 591
92.36.176.*

Sajt: www.icentar.ba


+2 Profil

icon Re: Mozgalica: Poređenje dve tabele28.07.2010. u 00:09 - pre 167 meseci
Ako sam ja dobro razumio zadatak onda i gore prezentirana tabela odnosno podaci ne odgovaraju postavljenom zadatku.
Naime peti red podataka postoji u obadvije tabele.
Jeste da se on nalazi u prvoj tabeli dva puta ali gore se ne pominje eliminacije ukoliko nadje parca u drugoj tabeli.
Ako je ovo tacno sto sam rekao onda jedno od rjesenja moze biti ovo, odnosno ovo je klasican postupak rjesavanja onoga sto sam razumio da se trazi.

Code:
SELECT Tab_A.ID, *
FROM Tab_A
WHERE (Tab_A.ID) Not In (SELECT Tab_A.ID
FROM Tab_A INNER JOIN Tab_B ON (Tab_A.Company = Tab_B.Company) AND (Tab_A.LName = Tab_B.LName) AND (Tab_A.FName = Tab_B.FName) AND (Tab_A.Job = Tab_B.Job) AND (Tab_A.Phone = Tab_B.Phone) AND (Tab_A.City = Tab_B.City))
UNION SELECT 
 Tab_B.ID, *
FROM Tab_B
WHERE (Tab_B.ID) Not In (SELECT Tab_B.ID
FROM Tab_A INNER JOIN Tab_B ON (Tab_A.Company = Tab_B.Company) AND (Tab_A.LName = Tab_B.LName) AND (Tab_A.FName = Tab_B.FName) AND (Tab_A.Job = Tab_B.Job) AND (Tab_A.Phone = Tab_B.Phone) AND (Tab_A.City = Tab_B.City))


zxz
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: Poređenje dve tabele28.07.2010. u 15:19 - pre 167 meseci
OK, pitanje moze da se shvati ovako: Pokazati sve rekorde koji smetaju da tabe_A i TAb_B budu identicne (za izabrane kolone, kompletne tabele ne mogu biti identicne u celini jer ID nije isti).

Da smanjimo zabunu, izbacujemo iz table TAb_A jednu kopiju rekorda koji je duplikat, tako da ostane smao jedna kopija u svakoj od tabela.
Dakle, izbaciti iz TAb_A jednu kopju od ovoga:
Company LName FName Job Phone City
ABC Jane King Worker 123456789 New York


I ZOranovo i Zonicevo resenje daju odgovor na pitanje "pokazi sve rekorde koji smetaju da tabele budu identicne"
Isti rezultat je dobio Zoran, tako sto je izabrao 'one u A koji nisu u B' pa napravio UNION sa 'oni u B koji nisu u A'. Zoran je 'one u A koji nisu u B' dobio kroz LEFT JOIN - unmatche query.

Zonic je uradio u principu isto to, samo je unmatched query realizovan an drugi nacin - sa NOT In (SELECT....). Lepo je znati da ima bar dva nacina da se odradi unmatched query.


Postoji jos jedno resenje, pomocu UNION ALL i GROUP BY. Ako uradimo ovo:
Code:

SELECT Company, LName, FName, Job, Phone, City
FROM Tab_A
UNION ALL SELECT Company, LName, FName, Job, Phone, City
FROM Tab_B;

dobicemo sve rekorde iz obe tabele, jednu ispod druge. Ako uradimo GROUP BY i COUNT(*) po kolonama Company, LName, FName, Job, Phone, City onda ce identicni rekordi imati COUNT = 2. Oni koji nisu identicni iamce COUNT = 1 ili >1 ako ima duplikata. Duplikati komplikuju stavri mnogo vise, pa smo rekli na pocetku ovog ove poruke da cemo izbaciti onaj jedan duplikat. Znaci, ako uradimo GROUP BY na UNION ALL i izaberemo one koji imaju COUNT(*) <> 2 dobicemo rekorde koji kvare identicnost tabela. Ovako:
Code:

SELECT Company, LName, FName, Job, Phone, City, COUNT(*) AS Cnt
FROM
(
SELECT Company, LName, FName, Job, Phone, City
FROM Tab_A
UNION ALL SELECT Company, LName, FName, Job, Phone, City
FROM Tab_B
)
GROUP BY Company, LName, FName, Job, Phone, City
HAVING COUNT(*)<>2


Hvala svima na doprinosu. Ne zamerite ako jepitanje bilo malo konfuzno postavljeno, ipak smo uspeli da se malo zabavimo. Ko zna, mozda nam ovo sve nekad zatreba..

Tema nija zakljucana. Pitanja i novi predlozireenja su dobrodosli.








 
Odgovor na temu

[es] :: Access :: Mozgalica: Poređenje dve tabele

[ Pregleda: 5480 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.