Guión:
Digamos que tengo dos tablas, TableA y TableB. La clave principal de TableB es una sola columna (BId), y es una columna de clave externa en TableA.
En mi situación, quiero eliminar todas las filas en la Tabla A que están vinculadas con filas específicas en la Tabla B: ¿Puedo hacerlo mediante uniones? ¿Eliminar todas las filas que se extraen de las uniones?
DELETE FROM TableA
FROM
TableA a
INNER JOIN TableB b
ON b.BId = a.BId
AND [my filter condition]
O me veo obligado a hacer esto:
DELETE FROM TableA
WHERE
BId IN (SELECT BId FROM TableB WHERE [my filter condition])
La razón por la que pregunto es que me parece que la primera opción sería mucho más eficiente cuando se trata de tablas más grandes.
¡Gracias!
DELETE TableA, TableB ...
y eso realmente eliminó los registros relevantes de ambos. Agradable.DELETE from TableA a using TableB b where b.Bid = a.Bid and [my filter condition]
DELETE a FROM TableA a INNER JOIN TableB b on b.Bid = a.Bid and [my filter condition]
Usaría esta sintaxis
fuente
Sí tu puedes. Ejemplo:
fuente
Estaba tratando de hacer esto con una base de datos de acceso y descubrí que necesitaba usar un. * Justo después de la eliminación.
fuente
Es casi lo mismo en MySQL , pero debe usar el alias de la tabla justo después de la palabra "DELETE":
fuente
La sintaxis anterior no funciona en Interbase 2007. En cambio, tuve que usar algo como:
(Nota: Interbase no admite la palabra clave AS para alias)
fuente
Estoy usando esto
y la forma @TheTXI es suficiente, pero leí respuestas y comentarios y descubrí que una cosa que debe responderse es usar la condición en la cláusula WHERE o como condición de unión. Así que decidí probarlo y escribir un fragmento, pero no encontré una diferencia significativa entre ellos. Puede ver el script sql aquí y el punto importante es que preferí escribirlo como commnet porque esto no es una respuesta exacta pero es grande y no se puede poner en los comentarios, por favor, perdónenme.
Si puede obtener una buena razón de este script o escribir otro útil, por favor comparta. Gracias y espero esta ayuda.
fuente
Supongamos que tiene 2 tablas, una con un conjunto Maestro (por ejemplo, empleados) y otra con un conjunto secundario (por ejemplo, Dependientes) y desea deshacerse de todas las filas de datos en la tabla Dependientes que no pueden activarse. con cualquier fila en la tabla maestra.
El punto a tener en cuenta aquí es que solo está recolectando una 'matriz' de EmpIDs de la unión primero, utilizando ese conjunto de EmpIDs para realizar una operación de eliminación en la tabla Dependientes.
fuente
En SQLite, lo único que funciona es algo similar a la respuesta de beauXjames.
Parece que todo se reduce a esto
DELETE FROM table1 WHERE table1.col1 IN (SOME TEMPORARY TABLE);
y que una tabla temporal puede ser creada por SELECT y JOIN a sus dos tablas, que puede filtrar esta tabla temporal en función de la condición en la que desea eliminar los registros en la Tabla1.fuente
puedes ejecutar esta consulta: -
fuente
La forma más simple es:
fuente
Minimice el uso de consultas DML con combinaciones. Debería poder hacer la mayoría de las consultas DML con subconsultas como las anteriores.
En general, las combinaciones solo deben usarse cuando necesita SELECCIONAR o GRUPAR por columnas en 2 o más tablas. Si eres solo toca varias tablas para definir una población, use subconsultas. Para consultas DELETE, use subconsulta correlacionada.
fuente