Files
SUST/migrations/member_street_migration.sql
2026-06-25 11:19:08 +02:00

210 lines
7.7 KiB
SQL

-- Erstellung der Tabelle für PostgreSQL
CREATE TABLE streets (
id serial4 PRIMARY KEY,
street_name TEXT NOT NULL UNIQUE
);
-- Einfügen der extrahierten Straßennamen (alphabetisch sortiert)
INSERT INTO streets (street_name) VALUES
('Asperlweg'),
('Bachweg'),
('Dorfstraße'),
('Erlenstraße'),
('Gartenweg'),
('Lilienweg'),
('Prambachkirchner Straße'),
('Rosenweg'),
('Schmiedstraße'),
('Sonnenfeld'),
('Wimmstraße');
ALTER TABLE members ADD COLUMN IF NOT EXISTS street_id INTEGER REFERENCES streets(id);
-- 1. Neue Spalte für die alte Hausnummer erstellen
ALTER TABLE members ADD COLUMN members_old_streetnumber TEXT;
-- 2. Bestehende Hausnummern in die Backup-Spalte kopieren
UPDATE members SET members_old_streetnumber = member_streetnumber;
CREATE TEMP TABLE address_mapping (
old_address TEXT,
new_street TEXT,
new_number TEXT
);
CREATE TABLE address_mapping (
old_address TEXT,
new_street TEXT,
new_number TEXT,
target_member_id INTEGER DEFAULT NULL -- NEU: Für gezielte Zuweisungen
);
-- Daten-Import aus den PDF-Quellen [cite: 7, 8, 10, 11]
INSERT INTO address_mapping (old_address, new_street, new_number) VALUES
('Sankt Thomas 1', 'Gartenweg', '1'),
('Sankt Thomas 2', 'Gartenweg', '2'),
('Sankt Thomas 3', 'Dorfstraße', '7'),
('Sankt Thomas 4', 'Bachweg', '5'),
('Sankt Thomas 5', 'Bachweg', '2'),
('Sankt Thomas 6', 'Bachweg', '9'),
('Sankt Thomas 8', 'Bachweg', '13'),
('Sankt Thomas 9', 'Bachweg', '10'),
('Sankt Thomas 10', 'Schmiedstraße', '11'),
('Sankt Thomas 11', 'Schmiedstraße', '24'),
('Sankt Thomas 12', 'Wimmstraße', '1a'),
('Sankt Thomas 13', 'Gartenweg', '3a'),
('Sankt Thomas 14', 'Schmiedstraße', '2a'),
('Sankt Thomas 15', 'Prambachkirchner Straße', '7'),
('Sankt Thomas 16', 'Dorfstraße', '1'),
('Sankt Thomas 17', 'Dorfstraße', '4'),
('Sankt Thomas 18', 'Prambachkirchner Straße', '9'),
('Sankt Thomas 19', 'Dorfstraße', '9'),
('Sankt Thomas 20', 'Dorfstraße', '5'),
('Sankt Thomas 21', 'Wimmstraße', '3'),
('Sankt Thomas 22', 'Lilienweg', '2'),
('Sankt Thomas 23', 'Prambachkirchner Straße', '6'),
('Sankt Thomas 24', 'Schmiedstraße', '14'),
('Sankt Thomas 26', 'Gartenweg', '5'),
('Sankt Thomas 27', 'Schmiedstraße', '16'),
('Sankt Thomas 28', 'Erlenstraße', '5'),
('Sankt Thomas 29', 'Dorfstraße', '11'),
('Sankt Thomas 30', 'Dorfstraße', '6'),
('Sankt Thomas 31', 'Schmiedstraße', '18'),
('Sankt Thomas 32', 'Gartenweg', '12'),
('Sankt Thomas 33', 'Gartenweg', '14'),
('Sankt Thomas 34', 'Prambachkirchner Straße', '3'),
('Sankt Thomas 35', 'Bachweg', '1'),
('Sankt Thomas 36', 'Erlenstraße', '7'),
('Sankt Thomas 37', 'Erlenstraße', '10'),
('Sankt Thomas 38', 'Prambachkirchner Straße', '10'),
('Sankt Thomas 39', 'Wimmstraße', '2'),
('Sankt Thomas 40', 'Wimmstraße', '9'),
('Sankt Thomas 40a', 'Wimmstraße', '11'),
('Sankt Thomas 41', 'Lilienweg', '14'),
('Sankt Thomas 42', 'Lilienweg', '12'),
('Sankt Thomas 43', 'Lilienweg', '10'),
('Sankt Thomas 44', 'Lilienweg', '8'),
('Sankt Thomas 45', 'Lilienweg', '6'),
('Sankt Thomas 46', 'Lilienweg', '4'),
('Sankt Thomas 47', 'Prambachkirchner Straße', '2'),
('Sankt Thomas 48', 'Gartenweg', '7'),
('Sankt Thomas 49', 'Gartenweg', '9'),
('Sankt Thomas 50', 'Erlenstraße', '1'),
('Sankt Thomas 51', 'Erlenstraße', '13'),
('Sankt Thomas 52', 'Bachweg', '19'),
('Sankt Thomas 53', 'Gartenweg', '21'),
('Sankt Thomas 54', 'Wimmstraße', '7'),
('Sankt Thomas 55', 'Erlenstraße', '12'),
('Sankt Thomas 56', 'Gartenweg', '16'),
('Sankt Thomas 57', 'Gartenweg', '18'),
('Sankt Thomas 58', 'Gartenweg', '23'),
('Sankt Thomas 60', 'Lilienweg', '5'),
('Sankt Thomas 61', 'Lilienweg', '7'),
('Sankt Thomas 62', 'Asperlweg', '1'),
('Sankt Thomas 63', 'Asperlweg', '2'),
('Sankt Thomas 64', 'Asperlweg', '4'),
('Sankt Thomas 65', 'Asperlweg', '3'),
('Sankt Thomas 66', 'Sonnenfeld', '3'),
('Sankt Thomas 70', 'Wimmstraße', '4'),
('Sankt Thomas 72a', 'Wimmstraße', '10a'),
('Sankt Thomas 73a', 'Wimmstraße', '12a'),
('Sankt Thomas 75', 'Lilienweg', '11'),
('Sankt Thomas 76', 'Lilienweg', '13'),
('Sankt Thomas 77', 'Lilienweg', '16'),
('Sankt Thomas 78', 'Schmiedstraße', '34'),
('Sankt Thomas 80', 'Schmiedstraße', '36'),
('Sankt Thomas 81', 'Erlenstraße', '9'),
('Sankt Thomas 82', 'Erlenstraße', '11'),
('Sankt Thomas 83', 'Gartenweg', '11'),
('Sankt Thomas 85', 'Lilienweg', '20'),
('Sankt Thomas 86', 'Lilienweg', '15'),
('Sankt Thomas 87', 'Lilienweg', '17'),
('Sankt Thomas 88', 'Wimmstraße', '14'),
('Sankt Thomas 89', 'Wimmstraße', '16'),
('Sankt Thomas 91', 'Lilienweg', '34'),
('Sankt Thomas 92', 'Lilienweg', '32'),
('Sankt Thomas 94', 'Lilienweg', '22'),
('Sankt Thomas 95', 'Lilienweg', '24'),
('Sankt Thomas 96', 'Lilienweg', '28'),
('Sankt Thomas 98', 'Erlenstraße', '15'),
('Sankt Thomas 100', 'Dorfstraße', '14'),
('Sankt Thomas 101', 'Dorfstraße', '16'),
('Sankt Thomas 102', 'Dorfstraße', '20'),
('Sankt Thomas 103', 'Rosenweg', '1'),
('Sankt Thomas 104', 'Rosenweg', '2'),
('Sankt Thomas 105', 'Rosenweg', '3'),
('Sankt Thomas 106', 'Rosenweg', '4'),
('Sankt Thomas 107', 'Rosenweg', '5'),
('Sankt Thomas 109', 'Rosenweg', '7'),
('Sankt Thomas 110', 'Rosenweg', '6'),
('Sankt Thomas 111', 'Rosenweg', '9'),
('Sankt Thomas 112', 'Rosenweg', '8'),
('Sankt Thomas 113', 'Rosenweg', '11'),
('Sankt Thomas 114', 'Rosenweg', '10'),
('Sankt Thomas 115', 'Rosenweg', '13'),
('Sankt Thomas 116', 'Rosenweg', '15'),
('Sankt Thomas 117', 'Rosenweg', '17'),
('Sankt Thomas 118', 'Sonnenfeld', '2'),
('Sankt Thomas 119', 'Sonnenfeld', '12'),
('Sankt Thomas 120', 'Sonnenfeld', '4'),
('Sankt Thomas 121', 'Sonnenfeld', '10'),
('Sankt Thomas 122', 'Sonnenfeld', '6'),
('Sankt Thomas 123', 'Sonnenfeld', '8'),
('Sankt Thomas 150', 'Erlenstraße', '6');
SELECT
m.member_street AS "Alte Gemeinde",
m.members_old_streetnumber AS "Alte Nummer (Backup)",
(m.member_street || ' ' || m.members_old_streetnumber) AS "Suchschlüssel",
s.street_name AS "Neue Straße",
map.new_number AS "Geplante neue Nummer"
FROM members m
JOIN address_mapping map ON (m.member_street || ' ' || m.members_old_streetnumber) = map.old_address
JOIN streets s ON s.street_name = map.new_street;
/*UPDATE members m
SET
street_id = s.id,
member_streetnumber = map.new_number
-- member_street = 'St. Thomas' -- Vereinheitlichung
FROM address_mapping map
JOIN streets s ON s.street_name = map.new_street
WHERE (m.member_street || ' ' || m.members_old_streetnumber) = map.old_address;
UPDATE members m
SET
street_id = s.id,
member_streetnumber = map.new_number,
member_street = 'St. Thomas' -- Optional: Den Gemeindenamen vereinheitlichen
FROM address_mapping map
JOIN streets s ON s.street_name = map.new_street
WHERE (m.member_street || ' ' || m.member_streetnumber) = map.old_address;*/
-- SCHRITT A: Spezifische Zuweisungen (ID-basiert)
UPDATE members m
SET
street_id = s.id,
member_streetnumber = map.new_number,
member_street = map.new_street
FROM address_mapping map
JOIN streets s ON s.street_name = map.new_street
WHERE (m.member_street || ' ' || m.members_old_streetnumber) = map.old_address;
--AND m.id = map.target_member_id; -- Matcht nur, wenn die ID explizit hinterlegt wurde
-- SCHRITT B: Allgemeine Zuweisungen (nur für die, die noch keine street_id haben)
-- Hier nehmen wir nur die Mappings, die KEINE target_member_id haben
UPDATE members m
SET
street_id = s.id,
member_streetnumber = map.new_number,
member_street = 'Sankt Thomas'
FROM address_mapping map
JOIN streets s ON s.street_name = map.new_street
WHERE (m.member_street || ' ' || m.members_old_streetnumber) = map.old_address
AND m.street_id IS NULL -- Nur Mitglieder, die noch nicht durch Schritt A versorgt wurden
AND map.target_member_id IS NULL; -- Nur allgemeine Mapping-Regeln nutzen
SELECT old_address, count(*)
FROM address_mapping
GROUP BY old_address
HAVING count(*) > 1;