DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   duplikati (http://www.devprotalk.com/showthread.php?t=988)

Blood 09. 05. 2006. 12:27

duplikati
 
Znam da je DISTINCT da ako ima duplikata, iste pokaze samo jednom, a pokaze i sve ostale. E sada, moje pitanje je da li mogu nekako da se provere samo duplikati, znaci npr SELECT DUPLICATE('polje1') FROM 'tabela1'; i da mi on pokaze samo duplikate iz polje1.

Nadam se da me neko shvatio...


Hvala

bluesman 09. 05. 2006. 13:15

Mozes na primer ovako:

SELECT Count(*) AS Cnt from tabela1 GROUP BY polje1 HAVING Cnt > 1

To ti prikazuje samo broj, ako hoces i koje je to polje onda samo dodaj polje1:

SELECT polje1, Count(*) AS Cnt from tabela1 GROUP BY polje1 HAVING Cnt > 1

Ako hoces da vidis recimo kojih ima tacno 4, onda samo zameni Cnt > 1 u Cnt = 4

ako neko zna bolje - shoot :)

Jel' sam shvatio?

dinke 09. 05. 2006. 13:16

Nesto ovako ?
Kôd:

select name,count(name) as dupecount from test group by name having dupecount >1
Možda takoće postoji i neka elegantnija varijanta sa podupitima.

[edit]hehe, blues i ja postovasmo isti odgovor prakticno istovremeno :)[/edit]

Blood 09. 05. 2006. 13:22

ovo je super, hvala vam...

ivanhoe 09. 05. 2006. 23:38

Citat:

Originalno napisao bluesman
SELECT polje1, Count(*) AS Cnt from tabela1 GROUP BY polje1 HAVING Cnt > 1

mozda lupam jer me mrzi da probam ali problem je sto ne mozes da dobijes direktno id (ili neko drugo unique polje) za duplirane recorde jer: SELECT id, polje1, count(*) .... nece raditi, jel tako?

EDIT: to bi moglo doduse lako da se resi ovako:
Kôd:

SELECT id, polje1 FROM tabela1 WHERE polje1 IN (SELECT polje1 FROM tabela1 GROUP BY polje1 HAVING count(*) > 1)
EDIT2: ispravio sam typo u kodu, spomenut u sledecoj poruci.. sad je sql ispravan..

bluesman 10. 05. 2006. 03:18

ne znam zašto ne bi mogao? Zašto misliš da neće raditi?

BTW, tvoj query sigurno ne radi, nisi ni definisao alias Cnt :)

Ti možeš komotono da radiš query:

SELECT *, count(*) AS Cnt FROM ... GROUP BY...

Jedina je razlika što kada koristiš SELECT COUNT(*) FROM ne moraš da grupišeš polja, dok kada imaš i neko drugo polje tipa SELECT ime1, ime2, COUNT(*) ... moraš da dodaš GROUP BY something.

ivanhoe 10. 05. 2006. 10:40

Citat:

Originalno napisao bluesman
ne znam zašto ne bi mogao? Zašto misliš da neće raditi?

glupi primer:
Kôd:

mysql> select * from ime;
+----+--------+
| id | ime    |
+----+--------+
|  1 | mika  |
|  2 | zika  |
|  3 | pera  |
|  4 | joca  |
|  5 | tra    |
|  6 | DUMMY  |
|  7 | DUMMY  |
|  8 | DUMMY  |
|  9 | DUMMY  |
| 10 | smarty |
| 11 | smarty |
+----+--------+
11 rows in set (0.02 sec)

kad uradis upit koji ste vi rekli:
Kôd:

mysql> select *, count(*) as cnt from ime  group by ime having cnt>1;
+----+--------+-----+
| id | ime    | cnt |
+----+--------+-----+
|  6 | DUMMY  |  4 |
| 10 | smarty |  2 |
+----+--------+-----+
2 rows in set (0.03 sec)

znaci ne dobijes id-jeve svih recorda sa dupliranom vrednoscu, sto je i logicno jer smo ih grupisali..

Moj predlog je sledeci (ovog puta bez typo-a :) ):
Kôd:

mysql> SELECT * FROM ime WHERE ime IN (SELECT ime FROM ime GROUP BY ime HAVING count(*) > 1);
+----+--------+
| id | ime    |
+----+--------+
|  6 | DUMMY  |
|  7 | DUMMY  |
|  8 | DUMMY  |
|  9 | DUMMY  |
| 10 | smarty |
| 11 | smarty |
+----+--------+
6 rows in set (0.00 sec)

QED. :1042:

ps. Ovo gore ne moraju da budu id-jevi, recimo da postoji kolona prezime, pa te zanimaju prezimena svih ljudi sa istim imenom, ili tako nesto.. id-jevi su mi prvi pali na pamet jer ove stvari obicno sluze da se pobrisu duplikati..

bluesman 10. 05. 2006. 13:35

Da, to je tačno kada tražiš svaki id posebno, mislim da je on samo hteo da pokaže koji su duplikati, ovo tvoje je kompletno "rešenje". :)


Vreme je GMT +2. Trenutno vreme je 15:20.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.