Probleme mit Löschabfrage

12/04/2011 - 08:10 von Cliff McLane | Report spam
Hallo zusammen,

der Ochs vor'm Berg? Eine verbundene csv-Tabelle liefert mir aktuelle
Artikeldaten (tblCRMSolutionMap). Diese Daten habe ich einmalig in
eine lokale Tabelle importiert (tblCRMSolutionMapLokal_TEST). Seit dem
hole ich per Anfügeabfrage immer die neuesten Artikel aus der
verbundenen csv und füge diese dann an die lokale Tabelle an. Klappt.
Nun fallen aber auch Artikel aus dem Sortiment. Das heißt, diese
Artikel sind in der verbundenen Tabelle nicht mehr vorhanden.

Damit:

SELECT tblCRMSolutionMap.UKatID, tblCRMSolutionMapLokal_TEST.*
FROM tblCRMSolutionMapLokal_TEST LEFT JOIN tblCRMSolutionMap ON
tblCRMSolutionMapLokal_TEST.SCProduktID=tblCRMSolutionMap.UKatID
WHERE (((tblCRMSolutionMap.UKatID) Is Null));

selektiere ich die in der lokalen Tabelle
(tblCRMSolutionMapLokal_TEST) zu löschenden Datensàtze. Und ab da
fàngt die Krux an. Wie muss meine Löschabfrage aussehen, damit die
oben selektierten Produkte aus der lokalen Tabelle gelöscht werden?
 

Lesen sie die antworten

#1 Bernd Gilles
12/04/2011 - 08:30 | Warnen spam
Am 12.04.2011 08:10, schrieb Cliff McLane:
der Ochs vor'm Berg? Eine verbundene csv-Tabelle liefert mir aktuelle
Artikeldaten (tblCRMSolutionMap). Diese Daten habe ich einmalig in
eine lokale Tabelle importiert (tblCRMSolutionMapLokal_TEST). Seit dem
hole ich per Anfügeabfrage immer die neuesten Artikel aus der
verbundenen csv und füge diese dann an die lokale Tabelle an. Klappt.
Nun fallen aber auch Artikel aus dem Sortiment. Das heißt, diese
Artikel sind in der verbundenen Tabelle nicht mehr vorhanden.

Damit:

SELECT tblCRMSolutionMap.UKatID, tblCRMSolutionMapLokal_TEST.*
FROM tblCRMSolutionMapLokal_TEST LEFT JOIN tblCRMSolutionMap ON
tblCRMSolutionMapLokal_TEST.SCProduktID=tblCRMSolutionMap.UKatID
WHERE (((tblCRMSolutionMap.UKatID) Is Null));

selektiere ich die in der lokalen Tabelle
(tblCRMSolutionMapLokal_TEST) zu löschenden Datensàtze. Und ab da
fàngt die Krux an. Wie muss meine Löschabfrage aussehen, damit die
oben selektierten Produkte aus der lokalen Tabelle gelöscht werden?



Ist UKatID die ID der zu löschenden Artikel?
Dann sollte etwas in der Art hier klappen:

DELETE FROM tblCRMSolutionMapLokal_TEST WHERE SSCProduktID IN
(SELECT tblCRMSolutionMap.UKatID
FROM tblCRMSolutionMapLokal_TEST LEFT JOIN tblCRMSolutionMap ON
tblCRMSolutionMapLokal_TEST.SCProduktID=tblCRMSolutionMap.UKatID
WHERE (tblCRMSolutionMap.UKatID Is Null)
)

Die IN-Klausel ist allerdings alles andere als performant.
Ich mach' es meist so, dass ich das in VBA mit 2 Schritten löse:

- INSERT in eine temp. Tabelle, die alle zu löschenden ID's enthàlt
- DELETE FROM (SELECT DISTINCTROW tblCRMSolutionMapLokal_TEST.SCProduktID
INNER JOIN tmp_Loeschtabelle ON tmp_Loeschtabelle.ID tblCRMSolutionMapLokaltblCRMSolutionMapLokal_TEST.SCProduktID)

tmp_Loeschtabelle kann danach wieder gelöscht werden.


Gruß, Bernd

Access goes Subversion - http://oasis.dev2dev.de

Ähnliche fragen