Gå til innhold

Finne alle duplikater i en tabell, MYSQL


Anbefalte innlegg

Hei,

Jeg har en tabell, og skal finne alle duplikater og liste dem...

 

jeg får dessverre ikke til å liste alle med denne metoden...

 

SELECT COUNT(*),cvr,id
FROM actor
GROUP BY cvr 
HAVING (COUNT(*) > 1)

 

utdata fra denne spørring:

2 00000000 1739

 

2 tallet sier at det er 2 duplikater... men jeg får det listet opp kun en gang..

 

Jeg vil ha listet begge,

 

Hvordan..?

Lenke til kommentar
Videoannonse
Annonse
arex1337: den spørringen din vil gi nøyaktig samme resultat som den første spørringen, men tankegangen din er riktig.. ;)

 

SELECT * FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2)

 

Så vidt jeg kan se har du tatt min spørring og byttet ut "COUNT(*), cvr, id" med "*". Jeg forstod av hovedposten at det var de tre kolonnene han ville ha. Du må gjerne forklare meg hvordan endringen du har gjort forandrer antall rader som blir returnert.

 

Videre kan jeg ikke se at min spørring vil gi samme resultat som hans, da min vil returnere like mange rader som subspørringen gir. Altså to eller flere - såfremt duplikater forekommer selvsagt.

Lenke til kommentar

Hei,

 

Takker.. Skal teste det her ud.

 

Men jeg skal da bruke resultatet av denne spørring til videre spørringer....

 

Altså jeg har funnet ut in det finnes duplikater i den ene tabell, Og hvis det finnes (jo det gjør) skal jeg finne om de aktuelle rader med unike ID, finnes i et annet tabell..

 

hvordan joiner jeg disse 2 spørringer, på en logisk måte...?

Lenke til kommentar

min første spørring er å finne om det er flere dupliakter i en tabell...

 

og til det har jeg blitt foreslått dette:

SELECT * FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2)

 

Så skal jeg bruke de resultater jeg får ut av denne spørringen, til å gå inn på en annen tabell og se om den har rader i den andre tabell.. Altså kun dupliakter fra den første spørring.

 

Er det noen lunde forståelig nu...?

Lenke til kommentar

min første spørring er å finne om det er flere dupliakter i en tabell...

 

og til det har jeg blitt foreslått dette:

SELECT * FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2)

 

Så skal jeg bruke de resultater jeg får ut av denne spørringen, til å gå inn på en annen tabell og se om den har rader i den andre tabell.. Altså kun dupliakter fra den første spørring.

 

Er det noen lunde forståelig nu...?

 

min første spørring er å finne om det er flere dupliakter i en tabell...

 

og til det har jeg blitt foreslått dette:

SELECT * FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2)

 

Så skal jeg bruke de resultater jeg får ut av denne spørringen, til å gå inn på en annen tabell og se om den har rader i den andre tabell.. Altså kun dupliakter fra den første spørring.

 

Er det noen lunde forståelig nu...?

 

min første spørring er å finne om det er flere dupliakter i en tabell...

 

og til det har jeg blitt foreslått dette:

SELECT * FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2)

 

Så skal jeg bruke de resultater jeg får ut av denne spørringen, til å gå inn på en annen tabell og se om den har rader i den andre tabell.. Altså kun dupliakter fra den første spørring.

 

Er det noen lunde forståelig nu...?

Lenke til kommentar

min første spørring er å finne om det er flere dupliakter i en tabell...

 

og til det har jeg blitt foreslått dette:

SELECT * FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2)

 

Så skal jeg bruke de resultater jeg får ut av denne spørringen, til å gå inn på en annen tabell og se om den har rader i den andre tabell.. Altså kun dupliakter fra den første spørring.

 

Er det noen lunde forståelig nu...?

Lenke til kommentar

Du sier at du skal bruke en spørring til å gå inn på en annen tabell og se om den har rader i den andre tabellen... Det du da kan gjøre er å kjøre en select på tabell2 med spørringen ovenfor i where clausen - men kun med ett felt i SELECT biten, slik at du kan kjøre f.eks id IN(select id ....) i WHERE clausen på spørring nr 2.

 

Nok en gang ett godt tidspunkt å gi oss tabellnavn + feltnavn.

 

Høres forresten ut som du har lyst å få tak i alle duplikatene for så å slette dem? Det første du isåfall skal gjøre er å fikse koden som legger inn bogus data, for så å kjøre en DELETE med spørring #2 som parameter, for så å kjøre en DELETE med spørring #1 som parameter...

 

... og ja.. har vært borti å måtte fikse litt på ting selv :(

Lenke til kommentar

Hei,

 

Jeg har to tabeller, den ene actor, og den andre prosjekt.

 

Jeg har ved denne spørring funnet ut om det finnes duplikater i actor tabellen (cvr)

SELECT cvr,id FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2)

 

nu skal jeg finne i den andre tabell prosjekt om denne actor er registrert flere ganger (de duplikater).

 

actor har en id, primary key, som igjen kommer i prosjekt tabell--- actor_id

actor tabellens id er unik, mens cvr er det samme...

 

Hvordan joiner jeg denne spørring med den forrige..?

 

Altså finn først om det er duplikater i actor tabell..og hvis ja, finn disse actor som har prosjekt i prosjekt tabell...og list disse...

Lenke til kommentar

Det hadde vel vært hyggelig om du i det minste hadde prøvd selv, og gitt oss koden du ikke får til å virke, og ikke bare vente at vi løser alle problemene for deg. Ellers må jeg si at tankesettet ditt er helt galt, du har ikke et settorientert tankesett, noe som må til for å kunne gjøre en god jobb med databaser. La meg forklare:

 

Altså finn først om det er duplikater i actor tabell..og hvis ja, finn disse actor som har prosjekt i prosjekt tabell...og list disse...

 

Det du mener er: Finn alle prosjekter hvor tilhørende aktor har duplikater. Men, sistnevnte utsagt ligger langt tettere opp til en optimal spørring enn utsagnet ditt, som heller mot bruk av en cursor.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...