2010-01-05 12 views
10

Sto lavorando con alcuni dati piuttosto sensibili, quindi voglio essere ASSOLUTAMENTE sicuro che lo sto facendo correttamente.ELIMINA i dati da una tabella, unendo attraverso due tabelle

Sto cercando di eliminare le righe di una tabella che sono associati con un altro tavolo

L'unico modo per associare il tavolo è quello di unire attraverso altri due tavoli ...

qui è la query esatta :

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 

Come potete vedere, non è bello.

sto ricevendo un errore strano però attraverso il browser query MySQL ...

tavolo Unkown 'TRANSACTION_AMOUNT' eliminazione multipla

Ho provato a leggere il manuale di MySQL ed è sembra che questo dovrebbe funzionare per me ... qualcuno ha qualche idea?

+0

Sembra che tu non stia utilizzando la tabella delle transazioni che hai aggiunto a un'altra parte della query. È intenzionale? –

+0

Assicurarsi di aver eseguito il backup dei dati/database prima di eseguire l'eliminazione. –

+0

Transaction_Type è una tabella? Sembra che tu stia cercando di rimuovere 2 colonne da una tabella anziché dalle righe ... –

risposta

23

è necessario eliminare le righe da tt, non le singole colonne:

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

grazie! Ha funzionato perfettamente =) –

+0

Devi specificare le tabelle da eliminare, con nomi o alias, tra "DELETE" e "FROM" in una cancellazione a più tabelle –

+0

@ md5sum: Questo è per le eliminazioni a più tabelle, ma anch'io non so se fa una diff in questo esempio –

0

È necessario comporlo inizialmente come una query per restituire le righe di interesse. Una volta eseguito il debug, convertilo in eliminazione.

+0

Ho. la selezione funziona bene. –

1

La sintassi non è corretta - si don't reference columns tra DELETE e FROM. Usa:

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 

per essere sicuri che si sta cancellando la roba giusta, sono d'accordo con wallyk che si dovrebbe verificare l'uscita del SELECT che ciò che viene restituito è quello che si desidera rimuovere prima. Altrimenti, eseguire l'eliminazione in una transazione in modo da poterlo ripristinare, se necessario.

+1

Non pensare che funzionerà - controlla la mia risposta al tuo commento sopra. –

0

Verificare con query di selezione e quindi prima di eseguire query di eliminazione dei dati critici ottenere una copia di backup di quel tavolo. così semplice come se qualcosa va storto, allora puoi almeno fare il backup.

Problemi correlati