210 lines
7.7 KiB
SQL
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; |