---
title: "Söka efter dubletter"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/136013-söka-efter-dubletter"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "devotion"
published: "2005-10-19T15:48:11.000Z"
updated: "2005-10-24T06:58:45.000Z"
replies: 16
views: 650
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/136013-söka-efter-dubletter"
---

# Söka efter dubletter

## #1 — devotion, 2005-10-19T15:48Z

:e 
Hej!

Kan man på något sätt göra en sql-fråga som gör en sökning efter dubletter i databastabellen och presenterar dessa? 

Jag har ett uppdragsprogram som använder handdatorer och ibland så gör användaren fel så det skapas dubletter av tiderna. Dubletterna har INTE samma ID men i övrigt så är det identiska

Jag skulle vilja söka ut de poster som har samma datum/tid och uppdragsnummer...

Använder access

Mvh

Henrik

Permalänk: https://www.webforum.nu/p/136013

## #2 — LarsG, 2005-10-19T16:21Z

```
select * 
from t as q
where exists 
(select 1
  from t
  where t.updNumber = q.updNumber
   and t.dateTimeValue = q.dateTimeValue
  group by t.updNumber,t.dateTimeValue 
   having count(*) > 1)
```

Permalänk: https://www.webforum.nu/p/1689467

## #3 — devotion, 2005-10-19T16:25Z

Det är ju fantastiskt....

Det finns lösningar för allt...

Ska testa!

Tack så länge...

/Henrik

Permalänk: https://www.webforum.nu/p/1689470

## #4 — Lasp, 2005-10-19T16:32Z

Tänk den dagen när LarsG kommer ut med sin formelsamling ;-)
Vilken källa till lösningar.
Hur kan vi hjälpa till?

Permalänk: https://www.webforum.nu/p/1689474

## #5 — devotion, 2005-10-19T17:22Z

Hmmmm...

Nu blev det så där svårt igen...

Hur innerjoinar jag tblTask med tblTime

Tabellen "t" i LarsG´s svar ska joinas

Hur får jag in den här raden?

```
INNER JOIN tblTime ON tblTask.Id = tblTime.TaskId
```

Henrik

Permalänk: https://www.webforum.nu/p/1689493

## #6 — LarsG, 2005-10-19T17:53Z

Två tabeller? 

Beskriv hur tabellerna är definierade och ge exempel på datainnehåll.

Permalänk: https://www.webforum.nu/p/1689513

## #7 — devotion, 2005-10-19T19:07Z

kommer....

Permalänk: https://www.webforum.nu/p/1689555

## #8 — devotion, 2005-10-19T19:16Z

Jo så här är det....

En tabell innehåller uppdragen; tblTask. En annan innehåller tiderna; tblTime. Dessa två tabeller kopplas ihop med: tblTask.Id = tblTime.TaskId

Problemet är att ibland så registreras det dubletter på tiderna när montörerna synkar handdatorerna fel...
"Dubletterna" hamnar i tblTime.

tblTime har innehåller fälten startDate och stopDate som är av central betydelse
tblTask innehåller TaskNr som definerar vilket uppdrag det handlar om...

så jag vill göra en jämförelse om startDate, stopDate och TaskNr är lika.. Är det de så ska de listas för att kunna spåra dubletter...

Hoppas det klarnar...

Henrik

Permalänk: https://www.webforum.nu/p/1689557

## #9 — devotion, 2005-10-20T07:48Z

Bumbeti...

mvh
Henrik

Permalänk: https://www.webforum.nu/p/1689717

## #10 — LarsG, 2005-10-20T10:30Z

```
select * 
from tbltask
where id
in (select taskId 
  from tblTime
  group by startDate, stopDate,TaskId
  having count(*) > 1)
```

Permalänk: https://www.webforum.nu/p/1689775

## #11 — devotion, 2005-10-20T11:59Z

ok!

Men, behöver jag inte joina då?

//Henrik

Permalänk: https://www.webforum.nu/p/1689829

## #12 — devotion, 2005-10-21T08:02Z

Hej!
Det funkar ju fint såvida att de uppdrag som har dubletter listas (dvs från tblTask) Det går ju sedan att spåra tiderna i tblTime.

Men jag vill ju att de tider som är dubbla ska listas, dvs från tblTime...

Tanken är ju att jag ska radera dubletterna (dvs tiderna), och då är det ju lättare att göra det om frågan visar innehållet från tblTime. 

Jag undrar också om det inte är nödvändigt att joina tblTime med tblTask. Jag behöver ju info om vilket uppdragsnummer som tiden tillhör, och den infon finns ju i tblTask.

Efter lite utökning av kriterier ser frågan ut så här:

```
select * 
from tbltask
where id
in (select taskId 
  from tblTime
  group by startDate, stopDate,TaskId, user, spec, time
  having count(*) > 1)
```

Har provkört i Access

Tack för all hjälp....

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1690220

## #13 — LarsG, 2005-10-21T08:24Z

Då är allt mycket enklare om jag förstår rätt

```
select startDate, stopDate,TaskId, user, spec, time
  from tblTime
  group by startDate, stopDate,TaskId, user, spec, time
  having count(*) > 1
```

Permalänk: https://www.webforum.nu/p/1690237

## #14 — devotion, 2005-10-21T09:01Z

Jo, det funkar finfint....
Men jag vill även ha med lite data från tblTask i resultatet. tex taskNr, så man vet till vilket uppdrag tiden hör.

```
tblTime.TaskId = tblTask.Id
```

Har provat att joina men får inte till det...

//Henrik

Permalänk: https://www.webforum.nu/p/1690263

## #15 — devotion, 2005-10-21T09:07Z

Oj då....

Hade joinat tabellerna fel....   :r 

Nu funkar det med den här koden... (tror jag...)

```
SELECT tblTime.StartDate, tblTime.StopDate, tblTime.TaskId, tblTime.User, tblTime.Spec, tblTime.Time, tblTask.TaskNr, tblTask.Status
FROM tblTask INNER JOIN tblTime ON tblTask.Id = tblTime.TaskId
GROUP BY tblTime.StartDate, tblTime.StopDate, tblTime.TaskId, tblTime.User, tblTime.Spec, tblTime.Time, tblTask.TaskNr, tblTask.Status
HAVING Count(*)>1
```

Tack LarsG...

Har du synpunkter på min lösning får du gärna skriva det...  Jag vill ju det ska bli så bra som möjligt!

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1690268

## #16 — devotion, 2005-10-22T12:20Z

Hej!
Jag har testat frågan nu och det fungerar utan några problem...

Nu är det ju så att 1 post visas där det finns dubletter. Men vet dvs inte om hur många dubletter det finns utan bara att det finns en eller flera dubletter..

Kan man inte modifiera frågan så att ALLA dubletter visas... Då kan man ju mha tex asp klicka på den man vill ta bort?

Det som är unikt för varje "dublettpost" är tblTime.Id

..och jag använder Access.

Mvh
henrik

Permalänk: https://www.webforum.nu/p/1690729

## #17 — devotion, 2005-10-24T06:58Z

Hej!

Jag valde en annan lösning på problemet...

Här kommer lösningen:

Först koden som LarsG hjälpt till med. Den identifierar alla tider som har dubletter och listar dom

```
"SELECT tblTime.StartDate, tblTime.StopDate, tblTime.TaskId, tblTime.User, tblTime.Spec, tblTime.Time, tblTask.TaskNr, tblTask.Status " &_
		 "FROM tblTask INNER JOIN tblTime ON tblTask.Id = tblTime.TaskId " &_
		 "GROUP BY tblTime.StartDate, tblTime.StopDate, tblTime.TaskId, tblTime.User, tblTime.Spec, tblTime.Time, tblTask.TaskNr, tblTask.Status " &_
		 "HAVING Count(*)>1"
```

Datat listas i en tabell där TaskId blir klickbar. Klickas det på taskId så kommer man vidare till en annan sida som listar ALLA dubletter på aktuellt taskId.

```
"SELECT tblTime.StartDate, tblTime.StopDate, tblTime.TaskId, tblTime.User, tblTime.Spec, tblTime.Time, tblTask.TaskNr, tblTask.Status, tblTime.Id " &_
		 "FROM tblTask " &_
		 "INNER JOIN tblTime ON tblTask.Id = tblTime.TaskId " &_
		 "WHERE tblTime.TaskId = " & strTaskId & " AND tblTime.USER = '" & strUser & "' AND tbltime.startDate = #" & dtStartDate & "# AND tblTime.stopDate = #" & dtStopdate & "# " &_
		 "ORDER By tblTime.startDate"
```

Här kan man sedan lätt plocka bort dubletten

```
strSQL="DELETE FROM tblTime WHERE Id = " & strTimeId & ""
```

Så, då var detta löst....   :birp 

Tack för all hjälp!

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1694260

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/136013-söka-efter-dubletter
