MS SQL 2000: DELETE FROM über 3 Tabellen

Aeffle

Grünschnabel
Hallo Zusammen,

ich stehe vor einem großen Problem, was aber eigentlich kein großes Problem sein kann.

Ich möchte aus einer Tabelle alle Einträge löschen, deren Kunden-Nr aus einer Excel-Tabelle kommen. Jetzt kennt die Tabelle aus der ich löschen möchte aber nicht diese Kunden-Nr, sondern nur die ID aus der Kunden-Tabelle der SQL-DB.

Im Prinzip möchte ich also die Excel-Tabelle in die SQL-DB importieren, über einen JOIN die 3 Tabellen verknüpfen und die Treffer löschen.

Konkret:
Aus der Tabelle _listing möchte ich alle Einträge löschen, die über die Tabelle _sales_channel eine _sales_channel.id haben, die wiederrum einer Kunden-Nr aus der Tabelle dellistung entspricht.

Mein SELECT funktioniert, aber wie bastele ich daraus ein DELETE FROM?


SELECT dellistung.Kundennummer AS Expr1
FROM _listing INNER JOIN
_sales_channel ON _listing.sales_channel_id = _sales_channel.id INNER JOIN
dellistung ON _sales_channel.customer_no = dellistung.Kundennummer
ORDER BY dellistung.Kundennummer

Dieses hier ist von der Syntax her wohl korrekt, bringt aber ein Timeout vom Server:

DELETE FROM _listing
WHERE EXISTS
(SELECT *
FROM _listing INNER JOIN
_sales_channel ON _listing.sales_channel_id = _sales_channel.id INNER JOIN
dellistung ON _sales_channel.customer_no = dellistung.Kundennummer)

Hilfe, ich bastele schon seit 3 Tagen rum


Danke Aeffle
 
Hallo,
probier mal folgendes aus:
Code:
DELETE eineTabelle
  WHERE eineTabelle.kundenId = kundenTabelle.kundenId AND
    kundenTabelle.kudenNr = excelTabelle.kundenNr
Habe jetzt keine DB zur Verfügung (und außerdem besteht meine Frau darauf, dass ich jetzt schön langsam mit dem Kochen beginne), mit der ich das ausprobieren könnte. Aber soweit ich mich erinnern kann, habe ich das Löschen von Daten immer auf diese Art erledigt.
 
Diese Syntax sollte richtig sein:
DELETE _listing
FROM _listing INNER JOIN
_sales_channel ON _listing.sales_channel_id = _sales_channel.id INNER JOIN
dellistung ON _sales_channel.customer_no = dellistung.Kundennummer

Wenn Du weiterhin einen Timeout bekommst, dann erhöhe den Timeout für diese Query oder probier' es mal in 2 Schritten:

Füge erst das Ergebnis der Select Query in eine Temp Tabele und lösche dann aus _listing alle Records, die in auch in der Temp Tabelle sind.
 
Auch hier herzlichen Dank für die schnelle Antwort.

Diese bestätigt, dass ich (obwohl Anfänger) nicht wirklich verkehrt liege.

Die Syntax erscheint korrekt, aber der SQL Server meldet "The Query Designer does not support the Optional FROM clause SQL construct."

Das finde ich sehr bemerkenswert. Da schlägt die Praxis wieder jede Theorie :-(

Und wegen des Timeouts versuche ich es morgen mal von einem anderen Rechner aus.
 
Zurück