hej.. Testa detta, det är inte perfekt men det låter dig veta hur många det är med samma namn och du kan ändra det hur du vill. Ok, vill nog hellre har något som fungerar direkt i SQL frågan.. Fungerade nästan.. sen behöver jag söka på fler fält.. Så här plockar du ut dubletter: Japp, Andreas fråga är betydligt mer optimal för att lista alla dubbletter. Du kan enkelt utöka den till en fråga som tar bort alla dubletter utom det första för varje dublett. kan forftarande inte ta bort.. Skapa en connection och öppna den.Dubletter?!
hur ska jag skriva en SQL fråga om gämför två fält och ser om det finns någon dublett..
ex en databas:
ID NAMN
nu vill jag ställa en fråga som kollar om det finns två eller fler namn som är likadana..Sv: Dubletter?!
<code>
namn = request.form("txtNamn")
SQL = "SELECT * FROM tblAnvandare"
'öppna din connection och recordset
lika = 0
rs.MoveFirst
do until rs.EOF
if namn = rs("Namn") then
lika = lika + 1
'eller hur du nu vill göra
end if
rs.MoveNext
loop
response.write "Det finns " & lika & " användare med samma namn."
</code>Sv: Dubletter?!
Och som visar dubletterna tillsammans..
Ex
ID NAMN
12 Namn1
2 dubletter:
23 Namn1
59 Namn1
så man kan ta bort dubletterna..Sv: Dubletter?!
Men gör jag såhär:
Set DEL = Server.CreateObject("ADODB.Recordset")
DEL.Open "DELETE FROM temp2 WHERE ID IN (SELECT ID FROM temp2 x WHERE ID > (SELECT MIN(ID) FROM temp2 WHERE namn = x.namn))",Connect,2,2
så får jag timeout..
varför?Sv: Dubletter?!
Dessa:
Namn
Adress
Ort
Får det inte att fungera riktigt.. Sv: Dubletter?!
SELECT Min(temp2.ID) AS FirstID, temp2.Namn, temp2.Adress, temp2.Ort, Count(*) AS Count
FROM temp2
GROUP BY temp2.Namn, temp2.Adress, temp2.Ort
HAVING Count(*)>1Sv: Dubletter?!
delete from temp2
from temp2 a
inner join (SELECT min(id) as firstid,namn
FROM temp2
GROUP BY namn
HAVING Count(*)>1) b
ON a.namn = b.namn
AND a.id <> b.firstidSv: Dubletter?!
skriver jag:
Set DEL = Server.CreateObject("ADODB.Recordset")
DEL.Open "DELETE FROM temp2 WHERE ID IN (SELECT ID FROM temp2 x WHERE ID > (SELECT MIN(ID) FROM temp2 WHERE namn = x.namn))",Connect,2,2
så får jag timeout
skriver jag:
Set DEL = Server.CreateObject("ADODB.Recordset")
DEL.Open "delete from temp2 from temp2 a inner join (SELECT min(id) as firstid,namn FROM temp2 GROUP BY namn HAVING Count(*)>1) b ON a.namn = b.namn AND a.id <> b.firstid",Connect,2,2
så får jag timeout..
skriver jag:
Set DEL = Server.CreateObject("ADODB.Recordset")
DEL.Open "SELECT Min(temp2.ID) AS FirstID, temp2.Namn, temp2.Adress, temp2.Ort, Count(*) AS Count FROM temp2
GROUP BY temp2.Namn, temp2.Adress, temp2.Ort HAVING Count(*)>1",Connect,2,2
DEL.DELETE
så klagar den på att FirstID inte egentligen finns..
Vad göra?!Sv: Dubletter?!
Skapa ett commandobjekt.
Set cmd.ActiveConnection = con
cmd.CommandText = "delete from temp2" & _
" from temp2 a" & _
" inner join (SELECT min(id) as firstid,namn" & _
" FROM temp2" & _
" GROUP BY namn" & _
" HAVING Count(*)>1) b" & _
" ON a.namn = b.namn" & _
" AND a.id <> b.firstid"
cmd.Execute , , 128
Jag är inte helt säker på att strängen blev korrekt, kan ha missat ett "-tecken eller något. Men du får nog rätt på det.