Avatar billede hnteknik Novice
23. juni 2004 - 22:51 Der er 7 kommentarer og
1 løsning

Der kan ikke slettes fra de angivne tabeller

Det her stiger over mit hoved. Jeg har lige lavet en smart rutine til at trække friske data ind i bassen fra et regneark, som man vælger. Vi skal lige have slettet de records, som ikke har været 'brugt', alså delete * from tbl1 left join tbl2 on tbl1.id=tb2.id where (tbl2.id is null) - hvor tbl2 indehlder brugte id. Det vil den fandme ikke ( Der kan ikke slettes fra de angivne tabeller.)

man kan sagten slette enkeltvis/flere fra select forespørgelsen:

SELECT T33.RegNr AS sletmig
FROM T33 LEFT JOIN T04 ON T33.RegNr = T04.RegNr
WHERE (((T04.RegNr) Is Null));

Når jeg så laver selectforespørgelsen om til en sletteforespørgelse vil den ikke virke:

DELETE t33.*
FROM T33 LEFT JOIN T04 ON T33.RegNr = T04.RegNr
WHERE (((T04.RegNr) Is Null));


Er det mig, der er blevet for træt og ikke kan se skoven for bar træer ??!!

Henrik
23. juni 2004 - 22:54 #1
Nej Access er lidt hysterisk med dette af og til. Prøv at omskrive din SQL således:

Delete From t33 Where RegNr Not in (Select RegNr From T04)
Avatar billede proaccess Nybegynder
24. juni 2004 - 09:13 #2
Du kan også prøve med:

DELETE DISTINCTROW t33.*
FROM T33 LEFT JOIN T04 ON T33.RegNr = T04.RegNr
WHERE T04.RegNr Is Null
Avatar billede hnteknik Novice
24. juni 2004 - 10:10 #3
Thomas - tak - hvorfor tænke jeg ikke på nestede forsprøgelser.
Din løsning 'NOT IN' er ikke rigtig, fordi den giver resultatet 0 records.
Men den fik min trætte hjerne til at tænke igen og her er løsningen som virker:

DELETE[tbl-vognpark].*
FROM [tbl-vognpark]
WHERE NOT exists  (Select * From [tbl-auto] where [tbl-vognpark].regnr =  [tbl-auto].regnr);
24. juni 2004 - 10:13 #4
ok, jeg synes nu også, at jeg plejer at kunne få den anden til at virke. Men bare din virker nu :o)

ProAccess->Skulle det virke med den gamle DISTINCTROW? Det har jeg faktisk aldrig overvejet. DISTINCTROW er vist også kun en Access-ting, er det ikke?
Avatar billede hnteknik Novice
24. juni 2004 - 10:22 #5
Proaccess - jeg svarede førend at jeg havde prøvet dit svar - det virker faktisk.

DELETE DISTINCTROW [tbl-vognpark].*
FROM [tbl-vognpark] LEFT JOIN [tbl-auto] ON [tbl-vognpark].RegNr = [tbl-auto].RegNr
WHERE ((([tbl-auto].RegNr) Is Null));

Hvorfor Access skal have en DISTINCTROW kommando for at virke, kan skyldes, at der mellem t33 og t04 er en 1-mange relation.

Proacces - IOU too
Avatar billede hnteknik Novice
24. juni 2004 - 10:30 #6
Jeg takker begge to for hjælpen. Når man er træt tænker man ikke klart mere.
Hvor 'NOT IN' ikke er negationen af 'IN' kræver nok nogle dybe knæbøjninger indenfor relationsalgebraen.
Avatar billede proaccess Nybegynder
24. juni 2004 - 10:37 #7
>Thomas, DISTINCTROW virker skam stadig... ;0)  - MEN som du siger er det blot endnu en "Access-Specialitet"
24. juni 2004 - 10:40 #8
Proaccess-> ja, ikke? (jeg vidste godt at den virkede, men bare ikke at den havde betydning i denne sammenhæng)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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