Löschen von Werten aus einer räumlichen "ST_Geometry"-Spalte

Mit der SQL-Anweisung DELETE werden Datenzeilen aus einer bestimmten Tabelle oder Ansicht entfernt.

Schritte:
  1. Öffnen Sie einen SQL-Editor, und stellen Sie eine Verbindung mit der Datenbank her.

    Verwenden Sie dazu ein Konto mit Berechtigungen zum Löschen von Elementen aus der Tabelle.

  2. Es folgen einige Beispiele für Abfragen zum Löschen von Daten für jede nicht unterstützte Datenbank:
    • Im folgenden Beispiel werden Werte aus einer Tabelle in Oracle basierend auf einem räumlichen Filter gelöscht:
      DELETE FROM sensitive_areas WHERE names
      (SELECT sa.names 
       FROM sensitive_areas sa, hazardous_sites hs
       WHERE sde.st_overlaps (sa.zone, sde.st_buffer (hs.location,.01)) = 1);
      
    • Im folgenden Beispiel werden Werte aus einer Tabelle in PostgreSQL basierend auf einem räumlichen Filter gelöscht:
      DELETE FROM sensitive_areas 
       WHERE names EXISTS (SELECT sa.names
        FROM sensitive_areas sa, hazardous_sites hs
        WHERE st_overlaps (sa.zone, st_buffer (hs.location,.01)) = 't');
      
    • Im folgenden Beispiel werden Werte aus einer Tabelle in einer SQLite-Datenbank basierend auf einem räumlichen Filter gelöscht:
      DELETE FROM sensitive_areas WHERE names
      (SELECT sa.names 
       FROM sensitive_areas sa, hazardous_sites hs
       WHERE st_overlaps (sa.zone, st_buffer (hs.location,.01)) = 1);
      
    • Verwenden Sie in IBM DB2 die folgende Anweisung:
      DELETE FROM sensitive_areas 
       WHERE names (SELECT sa.names 
        FROM sensitive_areas sa, hazardous_sites hs 
        WHERE db2gse.st_overlaps (sa.zone, db2gse.st_buffer (hs.location,.01)) = 1);
      
    • Informix unterstützt keine Änderungen an Tabellen oder Ansichten, die in einer Unterabfrage verwendet werden. Unterteilen Sie die Abfrage daher in zwei Schritte: Erstellen Sie eine temporäre Tabelle für die Auswahl und führen Sie den Löschvorgang über diese temporäre Tabelle aus.
      SELECT sa.name
       FROM sensitive_areas sa, hazardous_sites hs
       WHERE st_overlaps (sa.zone, st_buffer (hs.location,.01)) 
       INTO TEMP tempTable;
      
      DELETE FROM sensitive_areas
       WHERE name IN (select name from tempTable);
      
5/10/2014