Vinnaren i pepparkakshustävlingen!
2012-02-28, 15:31
  #1
Medlem
Hej

Är inte vidare haj på sql och sitter med ett beklämmande problem där jag fått in dubletter i mina tabeller.
Och dessa behöver jag få bort, Så jag behöver en query som loopar runt och raderar data i 2 tabeller som är kopplade tillsammans via en nyckel.

Förhållandet ser ut såhär

tabell 1 innehåller en header med olika kolumner och här har det dykt in poster där kolumnen med BatchID har dubbletter.
Här skulle jag behöva leta upp dessa och sen hämta ut nyckelvärdet.
Det nyckelvärdet skall jag sen använda för att hitta poster i tabell 2 som jag skall ta bort innan jag kan ta bort raden i tabell 1.

Detta vill jag sedan att det skall loopa runt tills det att det bara finns en post med Batchid`t kvar

Behöver också kunna ställa in sök parametrar så som datum och antal dubbletter det är jag letar efter.

Är det någon snäll själ där ute som möjligtvis kan sitta med en lämplig lösning eller iallafall lite hjälp på vägen ?
Citera
2012-02-28, 16:33
  #2
Medlem
dethalvabarnets avatar
finns en tråd i detta forum som har inlägg med hur man listar alla dubletter, börja där.
Citera
2012-02-28, 17:09
  #3
Medlem
Citat:
Ursprungligen postat av dethalvabarnet
finns en tråd i detta forum som har inlägg med hur man listar alla dubletter, börja där.

Nu var det ju inte riktigt lista dubletter jag behövde hjälp med :S
Citera
2012-02-28, 17:15
  #4
Medlem
dethalvabarnets avatar
Du måste veta vilka som är dubletter för att kunna ta bort dom.
Citera
2012-02-28, 17:17
  #5
Medlem
Citat:
Ursprungligen postat av dethalvabarnet
Du måste veta vilka som är dubletter för att kunna ta bort dom.

Att lista vilka som är dubbletter har jag redan lyckats med det är det som kommer efter det som är det jobbiga i den här frågan.
Citera
2012-02-28, 18:54
  #6
Medlem
Citat:
Ursprungligen postat av Teffie
Att lista vilka som är dubbletter har jag redan lyckats med det är det som kommer efter det som är det jobbiga i den här frågan.
Om du kan lista alla som är dubletter så kan du även omformulera samma sats väldigt enkelt så att den istället för att lista tar bort dessa. Generellt så måste du dock komma ihåg att sätta någon slags kriterium för vad som är originalet - exempelvis den post med lägst datum i en viss kolumn. Exempel nedan:
Kod:
SELECT P.PersonID AS [Original], PP.PersonID AS [Dubblett]
FROM Person P
JOIN Person PP ON PP.RegNo = P.RegNo AND PP.CreatedDate > P.CreatedDate

DELETE PP
FROM Person P
JOIN Person PP ON PP.RegNo = P.RegNo AND PP.CreatedDate > P.CreatedDate
Är tabellerna refererade från annat håll så släng in dessa i joinen och ta bort först.

Bit av kaka
__________________
Senast redigerad av SirPatman 2012-02-28 kl. 19:00.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback