2010-01-05 10 views
10

Ich arbeite mit einigen ziemlich sensiblen Daten, also möchte ich ABSOLUT sicher sein, dass ich es richtig mache.DELETE Daten aus einer Tabelle, durch zwei Tabellen verbinden

Ich versuche, die Zeilen in einer Tabelle zu löschen, die mit einer anderen Tabelle zugeordnet sind

Der einzige Weg, um die Tabelle zu verknüpfen, ist durch zwei weitere Tabellen zu verknüpfen ...

hier ist die genaue Abfrage :

DELETE tt.Transaction_Amount, tt.Transaction_ID 
    FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 

Wie Sie sehen können, ist es nicht schön.

Ich bin zwar durch den MySQL Query Browser eine ungerade Fehler bekommen ...

Unkown Tisch 'TRANSACTION_AMOUNT' in MULTI DELETE

Ich habe versucht, das MySQL-Handbuch zu lesen und es Scheint so, als würde mir das helfen ... hat irgendjemand eine Idee?

+0

Sie scheinen die Transaktionstabelle nicht zu verwenden, mit der Sie sich in Ihrer Abfrage an anderer Stelle verbunden haben. Ist das beabsichtigt? –

+0

Stellen Sie sicher, dass Sie Ihre Daten/Datenbank gesichert haben, bevor Sie sie löschen. –

+0

Ist Transaction_Type eine Tabelle? Es sieht so aus, als ob Sie versuchen, 2 Spalten aus einer Tabelle zu entfernen, anstatt Zeilen ... –

Antwort

23

Sie benötigen Zeilen aus tt, nicht einzelne Spalten löschen:

DELETE tt 
    FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 
+0

danke! Es hat perfekt funktioniert =) –

+0

Sie müssen die Tabellen angeben, um zu löschen, entweder mit Namen oder Aliase, zwischen 'DELETE' und' FROM' in einer Multi-Tabelle löschen –

+0

@ md5sum: Das ist für Multi-Tabelle löscht, aber ich auch weiß nicht, ob es ein diff in diesem Beispiel macht –

0

Sie sollten es zunächst als Abfrage erstellen, um die Zeilen von Interesse zurückzugeben. Sobald das alles debuggt ist, wandeln Sie es in ein Löschen um.

+0

Ich habe. die Auswahl funktioniert gut. –

1

Die Syntax ist falsch - Sie don't reference columns zwischen DELETE und FROM. Verwendung:

DELETE FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 

sicher sein, das richtige Material sind zu löschen, ich stimme mit wallyk, dass Sie sollten die Ausgabe der SELECT-Anweisung überprüfen, was zurückgegeben wird, ist das, was Sie vor dem entfernen möchten. Andernfalls führen Sie das Löschen in einer Transaktion durch, damit Sie es bei Bedarf zurückrollen können.

+1

Denke nicht, dass das funktioniert - überprüfe meine Antwort auf deinen Kommentar oben. –

0

prüfen mit Auswahlabfrage und dann vor Ausführung der Abfrage löschen auf kritische Daten eine Sicherungskopie der Tabelle erhalten. so einfach, als ob etwas schief geht, dann kann man zumindest sichern.

Verwandte Themen