Avatar billede larsomania Nybegynder
23. oktober 2000 - 15:27 Der er 6 kommentarer og
1 løsning

Slette poster ud fra forespørgsel i SQL

Nogen der kan den her på fingerne:

Jeg har denne forespørgsel:

SELECT usernumber FROM User_GenerateIndex WHERE IsActive=0

Hvor jeg så ønsker at slette linjerne fra følgende tabeller:

USER_OPTIONTABLE
USER_REFTABLE
USER_FLIGHTTABLE

Hvor USERNUMBER fra forespørgslen skal matche REF i hver enkelt tabel for at linjen skal slettes.

Nogen der kan det i en (evt. tre) SQL statements for mig?

Avatar billede ds-zim Nybegynder
23. oktober 2000 - 15:31 #1
Du kan ikke bare bruge DELETE ?
( DELETE [Felt1], [Felt2] ... FROM [Tabel] WHERE ((([IsActive])=0)); )
Avatar billede enlize Nybegynder
23. oktober 2000 - 15:32 #2
Vil du slette poster i din tabel - hvis det er tilfældet kan du anvende nedenstående Sql-streng

SqlQ = \"Delete From usernumber Where User_GenerateIndex WHERE IsActive=0\"

:)
Avatar billede larsomania Nybegynder
23. oktober 2000 - 15:36 #3
Nej, ikke alle poster - kun dem hvor REF svarer til USERNUMBER fra forespørgslen.

Men jeg har ISACTIVE liggende i USER_GENERATEINDEX tabellen sammen med USERNUMBER og vil altså på baggrund af SELECT forespørgslen slette fra fx. USER_OPTIONTABLE hvor usernumber er i denne tabels REF-felt.

DELETE * FROM User_Reftable WHERE Ref=xx

Hvor xx antager hver enkelt af de USERNUMBER jeg får ud fra min første SELECT.
Avatar billede ds-zim Nybegynder
23. oktober 2000 - 17:50 #4
DELETE User_GenerateIndex.Username FROM User_GenerateIndex, User_Optionable,
User_Reftable, User_Flightable WHERE (((User_GenerateIndex.Username)=\"*REF*\"));

*REF* ~ Her skal du så angive en reference, det går jeg ud fra du selv klarer,
        men ellers er det hvad du har brug for. Ved problemer med SQL kan jeg kun
        anbefale at kigge lidt på Access\' SQL-visning af en forespørgsel. På den
        måde tygger jeg mig igennem de \"hårde\".

Cheers, Zim
Umm, hva\' R REF ? hvor kommer den værdi fra ?
Avatar billede tigerdyr Nybegynder
23. oktober 2000 - 22:25 #5
hvorfor ikke lave det i en Stored Procedure ??
Avatar billede frylund Nybegynder
24. oktober 2000 - 11:29 #6
Følgende sletter fra en enkelt tabel ...

DELETE FROM USER_OPTIONTABLE uo
FROM User_GenerateIndex ug
Where
ug.IsActive=0
and uo.REF=ug.IsActive

Så er det bare at erstatte USER_OPTIONTABLE med de andre tabeller. Som tigerdyr skriver, så kan man også pakke det ned i en proc f.eks. sådan her:

create proc SletGums (
@Tbl
) as begin

exec \"DELETE FROM \"+@tbl+\"
      FROM User_GenerateIndex ug
      Where
      ug.IsActive=0
      and \"+@tbl+\".REF=up.IsActive\"
end
go

Den kan man så evt kalde 3 gange med @Tbl = tabellen du vil slette i. Hvis du bare altid skal slette i de 3 tabeller, ja så lav en proc med det i 8-)

Håber du kan bruge noget af det.

Avatar billede prh Nybegynder
13. december 2000 - 12:42 #7
Simpelt :

DELETE FROM USER_OPTIONTABLE
WHERE Ref IN (SELECT usernumber Ref FROM User_GenerateIndex WHERE IsActive=0)

DELETE FROM USER_REFTABLE
WHERE Ref IN (SELECT usernumber Ref FROM User_GenerateIndex WHERE IsActive=0)

DELETE FROM USER_FLIGHTTABLE
WHERE Ref IN (SELECT usernumber Ref FROM User_GenerateIndex WHERE IsActive=0)

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester