The Prodigy Skrevet 23. november 2007 Del Skrevet 23. november 2007 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
arex1337 Skrevet 26. november 2007 Del Skrevet 26. november 2007 (endret) La meg foreslå: SELECT COUNT(*), cvr, id FROM actor WHERE cvr IN (SELECT cvr FROM actor GROUP BY cvr HAVING COUNT(*) >= 2) Endret 26. november 2007 av arex1337 Lenke til kommentar
blackbrrd Skrevet 26. november 2007 Del Skrevet 26. november 2007 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) Lenke til kommentar
arex1337 Skrevet 26. november 2007 Del Skrevet 26. november 2007 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
blackbrrd Skrevet 26. november 2007 Del Skrevet 26. november 2007 Tjah, en spørring med aggregate + felter i selecten uten group by vil da ikke fungere, og hvis du kjører group by på cvr, så ender du opp med nøyaktig samme data som den orginale spørringen.. Lenke til kommentar
arex1337 Skrevet 27. november 2007 Del Skrevet 27. november 2007 Jepp, du har rett. Spørringen feiler rett og slett fordi jeg har en aggregatfunksjon uten GROUP BY. Bruk * eller tabellkolonner. Lenke til kommentar
The Prodigy Skrevet 29. november 2007 Forfatter Del Skrevet 29. november 2007 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
arex1337 Skrevet 29. november 2007 Del Skrevet 29. november 2007 Ta med eksempeltabeller og vis et eksempel på hva du vil gjøre, så får du nok fortere svar. Lenke til kommentar
The Prodigy Skrevet 29. november 2007 Forfatter Del Skrevet 29. november 2007 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
The Prodigy Skrevet 29. november 2007 Forfatter Del Skrevet 29. november 2007 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
The Prodigy Skrevet 29. november 2007 Forfatter Del Skrevet 29. november 2007 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
blackbrrd Skrevet 29. november 2007 Del Skrevet 29. november 2007 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
The Prodigy Skrevet 30. november 2007 Forfatter Del Skrevet 30. november 2007 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
roac Skrevet 30. november 2007 Del Skrevet 30. november 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå