1

Temat: poprawienie danych na podstawie dwóch tabel

Cześć,

Takie pytanie.
mam dwie tabele klient i kodypocztowe.
W tabeli klient mam kolumny imie, nazwisko, miasto,ulica,kod
w tabeli kodypocztowe mam tabele kod,ulica, ,miasto.

Niestety tabela klient ma puste kody pocztowe, ale pełne ma tabela kodypocztowe.
Skopiowałem poprzez przyrównanie 70% kodów z tabeli kodpocztowe do tabeli klient porpzez update gdzie klient.miejscowosc=kodypocztowe.miejscowosc and klient.ulica=kodypocztowe.ulica

Zostało mi 30%( to jest 40 tyś rekordów), ale napisany przezemnie update ma problem z dopasowaniem ulic.
Nie wrzuca mi całosci bo w tabeli klient ulice mam np Adama Mickiewicza, a w tabeli kodypocztowe mam MICKIEWICZA A.

I teraz moje pytanie czy da się to jakoś dopasować tzn porównać?
Żeby mógł to zrobić automatem?

2

Odp: poprawienie danych na podstawie dwóch tabel

Nie ma wielkiego wyboru, trzeba wyrównać obie tabele (chodzi mi o pole ulica). Na pewno możesz zmniejszyć ilość niepasujących danych usuwając w tabeli klient w polu ulica zbędne znaki typu dwie spacje lub spacja na początku lub końcu wyrazu. Proponuje też znaleźć w tabeli kodypocztowe te miejscowości, które mają tylko jeden kod pocztowy co dla małych miejscowości zdarza się dość często i wtedy zrobić porównanie po miejscowościach.

Co do odwróconych nazwy typu ul. "Jan Kowalski" i "Kowalski Jan" to możesz wykorzystać tablice patrz poniższy przykład
select *
from (select string_to_array('Mickiewicza Adama', ' ') as ul union all
      select string_to_array('Adama Mickiewicza', ' ')) as klienci
    ,(select string_to_array('Adama Mickiewicza', ' ') as ul,'00-000' as kod union all
      select string_to_array('Adama Jana Mickiewicza', ' '),'00-001' union all
      select string_to_array('Mickiewicza', ' '),'00-002') as kodypocztowe
where klienci.ul <@ kodypocztowe.ul
  and array_length(klienci.ul,1) = array_length(kodypocztowe.ul,1)