1

Temat: COPY AND NOT NULL

W bazie sa kolumny addresses, emails
Chciałbym wybrać te rekordy, które zawierają kod pocztowy spełniajacy warunek LIKE i które jednocześnie zawieraja jakikolwiek zapis w polu emails (tzn nie sa puste)

Taki zapis
SELECT
  adresy.address,
  adresy.emails
FROM
  public.adresy
WHERE
  (((address) Like '%00-2%' Or (address) Like '%00-7%' )
  AND
  emails IS  NOT NULL);

powoduje wyszukanie WSZYSTKICH rekordów spełniających warunek LIKE również tych, które pole emails mają "puste".

NIe mogę sobie z tym poradzić.

2

Odp: COPY AND NOT NULL

3

Odp: COPY AND NOT NULL

mail powinien zawierać znak "@" dlatego możesz napisać
Where coalesce(email,'') not like '%@%'
Zupełnie inną sprawą jest sprawdzenie poprawności adresu email - do tego służą wyrażenia regularne ale myślę, że to rozwiązanie zupełnie Ci wystarczy.

możesz też oczyścić swoją tabelę zmieniając tzw białe znaki na null np.

update tabela set email=null where coalesce(translate (email, chr(9)||chr(32)||chr(10)||chr(13),''),'')=''
Po takiej operacji twoje zapytanie gdzie napisałeś where email is not null powinno się wykonywać prawidłowo.

Ostatnio edytowany przez c_michal (2013-11-26 00:12:48)

4

Odp: COPY AND NOT NULL

5

Odp: COPY AND NOT NULL

Mam inne pytanie.
Są dwie tabelki.
Jedna: public.adresy1  z kolumnami : address,  adresy1.emails   
Druga: public.adresy2 z jedną kolumną adresy2.emails

Jak to zrobić żeby pobrać po kolei adres z drugiej tabelki, czyli z public.adresy2,
sprawdzić czy występuje w tabelce pierwszej, czyli w public.adresy1 w kolumnie adresy1.emails

jeżeli występuje to usunąć rekord w tabelce pierwszej public.adresy1 zawierający ten adres
jeżeli nie występuje to nic nie robić
i pobrać do sprawdzenia następny adres z public.adresy2

Będę bardzo wdzięczny za pomoc.
Pozdrawiam
W.

6

Odp: COPY AND NOT NULL

wykaz rekordów do skasowania:
select * from public.adresy1 a1 where exists (select 1 from public.adresy2 a2 where trim(upper(a1.emails))=trim(upper(a2.emails)));

Jak zweryfikujesz, że dokładnie o te rekordy Ci chodziło wykonaj

Delete from public.adresy1 a1 where exists (select 1 from public.adresy2 a2 where trim(upper(a1.emails))=trim(upper(a2.emails)));

Skasujesz te rekordy z tabeli adresy1 które są też w adresy2 (Mam nadzieje że dobrze Cie zrozumiałem)

7

Odp: COPY AND NOT NULL

Serdecznie dziękuję. Wydaje mi się że dobrze mnie zrozumiałeś. Zaraz zacznę próbować. Odezwę się później.
Pozdrawiam
W.