2010-01-05 22 views
10

Estoy trabajando con algunos datos bastante confidenciales, por lo que quiero estar ABSOLUTAMENTE seguro de hacerlo correctamente.ELIMINAR datos de una tabla, unir a través de dos tablas

Estoy tratando de eliminar las filas de una tabla que se asocian con otra mesa

La única manera de asociar la tabla es unirse a través de otras dos mesas ...

Ésta es la consulta exacta :

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 

Como puede ver, no es bonita.

estoy recibiendo un error por extraño que a través del navegador consulta MySQL ...

mesa Unkown 'TRANSACTION_AMOUNT' en BORRADO MULT

He intentado leer el manual de MySQL y Parece que esto debería funcionar para mí ... ¿alguien tiene alguna idea?

+0

Parece que no está utilizando la tabla de transacciones a la que se ha unido en otra parte de su consulta. Es esto intencional? –

+0

Asegúrese de haber hecho una copia de seguridad de sus datos/base de datos antes de realizar una eliminación. –

+0

¿Tiene Transaction_Type una tabla? Parece que estás intentando eliminar 2 columnas de una tabla en lugar de filas ... –

Respuesta

23

es necesario eliminar las filas de tt, no columnas individuales:

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

gracias !! Funcionó perfectamente =) –

+0

Tiene que especificar las tablas para eliminar, ya sea con nombres o alias, entre 'DELETE' y' FROM' en una tabla múltiple delete –

+0

@ md5sum: Eso es para eliminaciones de tablas múltiples, pero yo también no sé si hace una diferencia en este ejemplo –

0

Debe redactarlo inicialmente como una consulta para devolver las filas de interés. Una vez que todo esté depurado, conviértalo en un eliminar.

+0

Tengo. el seleccionado funciona bien. –

1

La sintaxis es incorrecta - usted don't reference columns entre DELETE y FROM. Uso:

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 

para estar seguro de que está eliminando las cosas correctas, estoy de acuerdo con wallyk que usted debe comprobar el resultado de la instrucción SELECT que lo que se devuelve es lo que desea eliminar antes. De lo contrario, realice la eliminación en una transacción para que pueda deshacerla si es necesario.

+1

No creo que funcione, verifique mi respuesta a su comentario anterior. –

0

Comprobar la consulta de selección y luego borrar antes de ejecutar la consulta en los datos críticos reciben una copia de seguridad de dicho cuadro. tan simple como si algo va mal, entonces al menos puede hacer una copia de seguridad.

Cuestiones relacionadas