Buscar..


Introducción

La instrucción DELETE se utiliza para eliminar registros de una tabla.

Sintaxis

  1. ELIMINAR DE TableName [WHERE Condition ] [LIMIT count ]

ELIMINAR ciertas filas con DONDE

Esto eliminará todas las filas que coincidan con los criterios de WHERE .

DELETE FROM Employees
WHERE FName = 'John'

ELIMINAR todas las filas

La omisión de una cláusula WHERE eliminará todas las filas de una tabla.

DELETE FROM Employees

Consulte la documentación de TRUNCATE para obtener detalles sobre cómo el rendimiento de TRUNCATE puede ser mejor, ya que ignora los desencadenantes e índices y registros para simplemente eliminar los datos.

Cláusula TRUNCATE

Use esto para restablecer la tabla a la condición en la que se creó. Esto elimina todas las filas y restablece valores como el incremento automático. Tampoco registra cada eliminación de fila individual.

TRUNCATE TABLE Employees

BORRAR ciertas filas basadas en comparaciones con otras tablas

Es posible DELETE datos de una tabla si coincide (o no coincide) con ciertos datos en otras tablas.

Asumamos que queremos DELETE datos de la Fuente una vez que se carguen en Target.

DELETE FROM Source
WHERE  EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )

Las implementaciones de RDBMS más comunes (p. Ej., MySQL, Oracle, PostgresSQL, Teradata) permiten unir tablas durante DELETE permite una comparación más compleja en una sintaxis compacta.

Agregando complejidad al escenario original, asumamos que Aggregate se crea a partir de Target una vez al día y no contiene la misma ID, pero contiene la misma fecha. Supongamos también que queremos eliminar los datos de la Fuente solo después de que se haya completado el agregado del día.

En MySQL, Oracle y Teradata esto se puede hacer usando:

DELETE FROM Source
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date

En el uso de PostgreSQL:

DELETE FROM Source
USING  TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Básicamente, esto da como resultado INNER JOINs entre Source, Target y Aggregate. La eliminación se realiza en el origen cuando existen los mismos ID en el objetivo Y la fecha presente en el destino para esos ID también existe en el agregado.

La misma consulta también se puede escribir (en MySQL, Oracle, Teradata) como:

DELETE Source
FROM   Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Las combinaciones explícitas pueden mencionarse en las declaraciones de Delete en algunas implementaciones de RDBMS (por ejemplo, Oracle, MySQL) pero no se admiten en todas las plataformas (por ejemplo, Teradata no las admite)

Las comparaciones pueden diseñarse para verificar los escenarios de desajuste en lugar de combinar los con todos los estilos de sintaxis (observe NOT EXISTS continuación)

DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow