Поиск…


Вступление

Оператор DELETE используется для удаления записей из таблицы.

Синтаксис

  1. DELETE FROM TableName [WHERE Condition ] [LIMIT count ]

УДАЛИТЬ некоторые строки с ГДЕ

Это приведет к удалению всех строк, соответствующих критериям WHERE .

DELETE FROM Employees
WHERE FName = 'John'

УДАЛИТЬ все строки

Опускание предложения WHERE приведет к удалению всех строк из таблицы.

DELETE FROM Employees

См. Документацию TRUNCATE для получения подробной информации о том, как производительность TRUNCATE может быть лучше, поскольку она игнорирует триггеры, индексы и журналы, чтобы просто удалять данные.

Предложение TRUNCATE

Используйте это, чтобы сбросить таблицу до состояния, в котором она была создана. Это удаляет все строки и сбрасывает такие значения, как автоинкремент. Он также не регистрирует удаление каждой отдельной строки.

TRUNCATE TABLE Employees

УДАЛИТЬ некоторые строки на основе сравнений с другими таблицами

Можно DELETE данные из таблицы, если они соответствуют (или не соответствуют) определенным данным в других таблицах.

Предположим, мы хотим DELETE данные из Источника после его загрузки в Целевой.

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

Наиболее распространенные реализации RDBMS (например, MySQL, Oracle, PostgresSQL, Teradata) позволяют объединять таблицы во время DELETE что позволяет более сложное сравнение в компактном синтаксисе.

Добавив сложность к исходному сценарию, предположим, что Aggregate построен из Target один раз в день и не содержит одного и того же идентификатора, но содержит ту же дату. Предположим также, что мы хотим удалить данные из Источника только после того, как совокупность будет заполнена в течение дня.

В MySQL, Oracle и Teradata это можно сделать, используя:

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

В PostgreSQL используйте:

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

Это по существу приводит к ВНУТРЕННЫМ СОЕДИНЕНИЯМ между Source, Target и Aggregate. Удаление выполняется для Источника, когда те же идентификаторы существуют в Целевом И дата, присутствующая в Целевом для этих идентификаторов, также существуют в Агрегате.

Тот же запрос также может быть написан (в MySQL, Oracle, Teradata) следующим образом:

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

Явные объединения могут упоминаться в Delete в некоторых реализациях СУБД (например, Oracle, MySQL), но не поддерживаются на всех платформах (например, Teradata не поддерживает их)

Сравнение может быть спроектировано для проверки сценариев несоответствия, а не для сопоставления со всеми стилями синтаксиса (см. Ниже NOT EXISTS )

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow