To podzapytanie nie zwraca żadnego nulla
select k.numer
from fk_konta2020 k
where k.numer like '201010010%' and char_length (k.numer) > 9;
Jednak nie napisałem chyba najważniejszego, co chyba ma duże znaczenie.
Dane w tabeli sys_rozrach2020 oraz fk_konta2020 nie są takie same. W tabeli fk_konta2020 właśnie w zakresie
where k.numer like '201010001%' and char_length (k.numer) > 9
musiałem dodać jeden znak w k.numer i konto k.numer wygląda tak, że dodałem jedno zero na czwartym miejscu od końca. Natomiast r.konto z tabeli sys_rozrach2020 nie ma tego zera. Dlatego taki select nie zwraca żadnych wyników:
select r.konto
from sys_rozrach2020 r
where r.konto in
(select k.numer
from fk_konta2020 k
where k.numer like '201010010%' and char_length (k.numer) > 9);
Zatem również to zapytanie nie zwraca żadnych wyników:
select K.NUMER, R.KONTO
from FK_KONTA2020 k
left outer join SYS_ROZRACH2020 r on (K.NUMER = R.KONTO)
where K.NUMER like '201010010%' and
char_length(K.NUMER) > 9 and r.konto like '201010001%' and char_length (r.konto) > 9
Jak zatem napisać takiego update'a, który zmieni r.konto z tabeli sys_rozrach2020, bo takie zapytanie nie działą:
update sys_rozrach2020 r
set r.konto =
(select k.numer
from fk_konta2020 k
where k.numer like '201010010%' and char_length (k.numer) > 9)
where r.konto like '201010010%' and char_length (r.konto) > 9;
bo pojawia się komunikat:
can't format message 13:189 -- message file C:\WINDOWS\firebird.msg not found.
multiple rows in singleton select.