Torben Jensen skrev:
> Jeg ved at dette måske ikke er den rette gruppe, men kunne
> ikke finde en bedre. I er derfor velkommen til at "futte" mig
> et andet sted hen.
Spørgsmålet hører til i databasegrupen - jeg xfutter dertil.
> Altså en forespørgsel som udvælger alle dubletter i feltet
> bestillingsnr.
>
> Efter at have udvalgt disse poster ønsker jeg nu at slette
> alle poster fra min tabel med de udvalgte bestillingsnumre.
For lige at være helt sikker: Vil du slette alle poster med et
ikke-unikt bestillingsnummer eller vil du kun slette dubletterne
(alle bestillingsnumre bevares, men dubletterne fjernes)?
Det første kan relativt let gøres i SQL - det sidste er ikke så
nemt.
> DELETE FROM kny WHERE bestillingsnr IN
> (SELECT Bestillingsnr, Count([Bestillingsnr]) as
> antalDUbletter FROM kny
> GROUP BY [Bestillingsnr]
> HAVING Count([Bestillingsnr])>1 );
En in-forespørgsel må så vidt jeg husker ikke indeholde andre
felter end det du vil sammenligne med. Prøv at omskrive til:
DELETE FROM kny WHERE bestillingsnr IN
(SELECT Bestillingsnr FROM kny
GROUP BY [Bestillingsnr]
HAVING Count([Bestillingsnr])>1 )
> Her får jeg imidlertid at vide, at jeg skal bruge det
> reserverede or EXISTS, men indsætter jeg det istedet for
> "bestillingsnr IN", så sletter den alle mine poster i
> tabellen.
Hvis du skal bruge exists, skal du have en forbindelse mellem den
ydre og den indre forespørgsel. Jeg er ikke sikker på hvordan
forbindelsen skal laves når du bruger en GROUP BY-
underforespørgsel, men herunder er et bud:
DELETE FROM kny
WHERE EXISTS (
SELECT 1
FROM kny k2
WHERE k2.bestillingsnr = kny.bestillingsnr
GROUP BY Bestillingsnr
HAVING Count(Bestillingsnr) > 1
)
> Er der en venlig sjæl, der kan fortælle mig hvad jeg gør
> forkert?
Hvis du ikke skriver et kriterie ind til at forbinde den ydre og
den indre forespørgsel, vil resultatet være at enten alle eller
også ingen poster slettes - afhængig af om den indre forespørgsel
er tom eller ej.
Jeg ville prøve med IN en gang til hvis jeg var dig.
Krydspostet til 2 grupper, opfølgning (FUT)[1] er sat til: <news:dk.edb.database>
Svar på dette indlæg henvises til nævnte gruppe og kan kun ses der
1) <
http://www.usenet.dk/ord/lokal.html#fut>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på
http://usenet.dk/netikette/citatteknik.html