Index: trunk/import/pp_laden.sql
===================================================================
--- trunk/import/pp_laden.sql	(revision 296)
+++ trunk/import/pp_laden.sql	(revision 315)
@@ -16,4 +16,6 @@
 --  2013-07-10 F.J. Bereinigen der alkis_beziehungen auskommentiert, wird jetzt im Trigger gelöst.
 --  2012-10-24 Neue Tabelle für die Präsentation von Straßennamen und -Klassifikationen
+--  2014-02-05 Bereits auskommentierte Aktionen gelöscht für die Beseitigung von Rdundanzen aus fehlerhaften Triggern
+
 
 -- ============================
@@ -41,126 +43,4 @@
 -- Besser wäre: sofort im Trigger bei replace entfernen.
 -- Siehe Schema in FUNCTION delete_feature_kill
-
--- 2013-07-10 Das folgende Delete auskommentiert. Das wird jetzt im Trigger gelöst.
-------
---	DELETE 
---	  FROM alkis_beziehungen AS bezalt        -- Beziehung Alt
---	 WHERE EXISTS
---		   (SELECT ogc_fid
---			 FROM alkis_beziehungen AS bezneu -- Beziehung Neu
---			WHERE bezalt.beziehung_von = bezneu.beziehung_von
---			  AND bezalt.beziehung_zu  = bezneu.beziehung_zu
---			  AND bezalt.beziehungsart = bezneu.beziehungsart
---			  AND bezalt.ogc_fid       < bezneu.ogc_fid
---			);
-------
-
--- Denkbar ist eine Variante für den Trigger, die zusätzlich
--- auf eine bestimmte gml_id filtert.
--- Damit wäre die DB schon während der Konvertierung konsistenter.
--- Nachtrag 2013-02-20:
--- Diese provisorische Lösung korrigiert nur die Fälle, wo ein Replace eine redundante Beziehung
--- einträgt. Wenn ein Objekt und seine Beziehung gleichzeitig geändert wird, wird der alte
--- Eintrag nicht gefunden und verbleibt in den Beziehungen.
--- Siehe z.B. in Datei "sichten.sql" die Abfrage "mehrfache_buchung_zu_fs" 
-
-
--- Mehrfache Buchungen zu einem Flurstück korrigieren.
--- Neu 2013-02-21
--- Dieser Fehler enststeht, wenn ein Replace zu "ax_flurstueck" gleichzeitig die
--- Beziehung 'istGebucht' zu "ax_buchungsStelle" ändert.
--- Kann entfallen, sobald PostNAS bei Replace die "alkis_beziehungen" richtig fortführt.
-
--- Version Marvin Brandt, Unna
---	DELETE
---	--  SELECT *
---	FROM alkis_beziehungen a1
---	WHERE a1.beziehung_von = ANY(SELECT gml_id FROM (
---				SELECT f.*,
---						(SELECT count(f2.gml_id) as anzahl
---						FROM ax_flurstueck f2
---						JOIN alkis_beziehungen a1 ON f2.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht'
---						WHERE f2.gml_id = f.gml_id
---						) as anzahl
---					FROM ax_flurstueck f
---					) as sub
---				WHERE sub.anzahl > 1 )
---	AND a1.beziehungsart = 'istGebucht'
---	AND a1.ogc_fid = (SELECT min(sub.ogc_fid) as ogc_fid FROM (
---		SELECT a1.*,
---			(SELECT count(f2.gml_id) as anzahl
---				FROM ax_flurstueck f2
---				JOIN alkis_beziehungen a1 ON f2.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht'
---				WHERE f2.gml_id = f.gml_id
---			) as anzahl
---		FROM ax_flurstueck f
---		JOIN alkis_beziehungen a1 
---		ON f.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht'
---		) as sub
---	WHERE sub.beziehung_von = a1.beziehung_von);
-
-
--- 2013-07-10 Das folgende Delete auskommentiert. Das wird jetzt im Trigger gelöst
-------
---	-- Version Frank Jäger, Lemgo 
---	DELETE
---	-- SELECT *   -- TEST: erst mal schauen, was gelöscht würde, wenn ...
---	FROM alkis_beziehungen b
---	WHERE b.beziehungsart = 'istGebucht'
---	  -- Die erste subquery zählt die Buchungen zu einer (Flurstücks-) gml_id.
---	  -- Es wird nur dort gelöscht, wo mehrerer Buchungen existieren.
---	  AND 1 < 
---		 ( SELECT count(f1.ogc_fid) AS anzfs
---			FROM ax_flurstueck f1
---			JOIN alkis_beziehungen z
---			  ON f1.gml_id = z.beziehung_von
---		   WHERE f1.gml_id = b.beziehung_von
---			 AND z.beziehungsart = 'istGebucht'
---		   GROUP BY f1.gml_id )
---	  -- Die zweite Subquery liefert die letzte (= aktuelle) Beziehung.
---	  -- Diese aktuelle Buchung wird vom Löschen ausgeschlossen.
---	  AND b.ogc_fid <
---		 ( SELECT max(a.ogc_fid) AS maxi
---			FROM ax_flurstueck f2
---			JOIN alkis_beziehungen a
---			  ON f2.gml_id = a.beziehung_von
---		   WHERE f2.gml_id = b.beziehung_von
---			 AND a.beziehungsart = 'istGebucht'
---		   GROUP BY a.beziehung_von )
---	-- bei Test mit SELECT darf man sortieren:
---	--  ORDER BY b.beziehung_von, b.ogc_fid
---	;
-------
-
-
--- SELECT *
---  FROM alkis_beziehungen AS bezalt
---  WHERE EXISTS
---        (SELECT ogc_fid
---          FROM alkis_beziehungen AS bezneu
---         WHERE bezalt.beziehung_von = bezneu.beziehung_von
---           AND bezalt.beziehung_zu  = bezneu.beziehung_zu
---           AND bezalt.beziehungsart = bezneu.beziehungsart
---           AND bezalt.ogc_fid       < bezneu.ogc_fid
---         );
-
--- SELECT *
---  FROM alkis_beziehungen AS bezalt
---  WHERE EXISTS
---        (SELECT ogc_fid
---          FROM alkis_beziehungen AS bezneu
---         WHERE bezalt.beziehung_von = bezneu.beziehung_von
---           AND bezalt.beziehung_zu  = bezneu.beziehung_zu
---           AND bezalt.beziehungsart = bezneu.beziehungsart
---           AND bezalt.ogc_fid       < bezneu.ogc_fid
---         )
---      -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
---      -- die aktuell noch in der Delet-Tabelle stehen
---      AND EXISTS
---         (SELECT ogc_fid
---          FROM delete
---          WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
---             OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
---         );
 
 
@@ -199,5 +79,4 @@
 
 -- Straßen - N a m e n  und  - K l a s s i f i k a t i o n
--- NEU 2013-10-24
 -- Tabellen für die Präsentation von Straßen-Namen und -Klassifikationen
 -- Daten aus dem View "ap_pto_stra" werden im PostProcessing gespeichert in der Tabelle "pp_strassenname".
@@ -410,4 +289,3 @@
   WHERE z.gemeinde is Null;      -- ..  noch nicht vorhanden ist
 
-
 -- ENDE --
