Ricerca…


introduzione

L'istruzione DELETE viene utilizzata per eliminare i record da una tabella.

Sintassi

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

CANCELLARE determinate righe con DOVE

Questo eliminerà tutte le righe che corrispondono ai criteri WHERE .

DELETE FROM Employees
WHERE FName = 'John'

CANCELLARE tutte le righe

L'omissione di una clausola WHERE cancellerà tutte le righe da una tabella.

DELETE FROM Employees

Consultare la documentazione TRUNCATE per i dettagli su come le prestazioni di TRUNCATE possono essere migliori perché ignorano i trigger, gli indici e i registri per eliminare solo i dati.

Clausola TRUNCATE

Utilizzare questo per ripristinare la tabella alla condizione in cui è stata creata. Questo elimina tutte le righe e reimposta valori come l'incremento automatico. Inoltre non registra ogni singola eliminazione di riga.

TRUNCATE TABLE Employees

CANCELLA determinate righe in base al confronto con altre tabelle

È possibile DELETE dati da una tabella se corrispondono (o non corrispondono) determinati dati in altre tabelle.

Supponiamo di voler DELETE dati da Source una volta caricati in Target.

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

Le implementazioni RDBMS più comuni (es. MySQL, Oracle, PostgresSQL, Teradata) consentono di unire le tabelle durante DELETE consentendo un confronto più complesso in una sintassi compatta.

Aggiungendo complessità allo scenario originale, assumiamo che Aggregate sia stato creato da Target una volta al giorno e non contenga lo stesso ID ma contenga la stessa data. Supponiamo inoltre di voler cancellare i dati da Source solo dopo che l'aggregato è stato compilato per il giorno.

Su MySQL, Oracle e Teradata questo può essere fatto usando:

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

Nell'uso di PostgreSQL:

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

Ciò si traduce essenzialmente in INNER JOIN tra Source, Target e Aggregate. La cancellazione viene eseguita su Source quando esistono gli stessi ID nella destinazione E la data presente in Target per quegli ID esiste anche in Aggregate.

La stessa query può anche essere scritta (su MySQL, Oracle, Teradata) come:

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

I join espliciti possono essere menzionati nelle istruzioni Delete su alcune implementazioni RDBMS (ad esempio Oracle, MySQL) ma non supportati su tutte le piattaforme (ad esempio Teradata non li supporta)

I confronti possono essere progettati per verificare gli scenari di mismatch invece di quelli corrispondenti con tutti gli stili di sintassi (osservare NOT EXISTS sotto)

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow