Мне нужно join
несколько таблиц. В одном из столбцов есть диакритические знаки (например, áíé ...), но во втором нет диакритических знаков, а в некоторых записях есть постфикс. Допустим,
Table A: Table B:
code | name | surname name | username
------------------------- --------------------
1234 | John | Doé Doe | Doe
5678 | Jane | Smith Doe | DoeJ
9012 | Tom | Novák Dean Doe | DoeD
Мне нужно join
этих двух таблиц на surname
и username
, и мне нужно показать все записи из таблицы B, которые могут совпадать с записями из таблицы A. И у меня есть список конкретных code
из таблицы А.
Так что мой select
должен возвращать что-то вроде этого, если мой список кодов будет только 1234:
A.name | A.surname | B.username
-----------------------------------
John | Doé | Doe
John | Doé | DoeJ
John | Doé | DoeD
Теперь у меня есть это select
:
select A.name, A.surname, B.username
from (select column_value as code
from SYS.ODCIVARCHAR2LIST('1234', '5678', '9012', '3456')) t
right join tableA A on t.code = A.code
join tableB B
on replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(p.prijmeni, 'Ě', 'E'), 'Š', 'S'), 'Č', 'C'), 'Ř', 'R'), 'Ž', 'Z'), 'Ý', 'Y'), 'Á', 'A'), 'Í', 'I'), 'É', 'E'), 'Ú', 'U'), 'Ů', 'U'), 'Ď', 'D'), 'Ň', 'N'), 'Ó', 'O'), 'Ť', 'T')
like (B.username || '%')
where t.code is not null;
И в результате получается только одна запись:
A.name | A.surname | B.username
-----------------------------------
John | Doé | Doe
Когда я удаляю (комментирую) предложение t.code is not null
в where
, я получаю частично правильный результат:
A.name | A.surname | B.username
-----------------------------------
John | Doé | Doe
null | null | DoeJ
null | null | DoeD
Но в таблице B есть сотни записей, которые мне не нужны в моем результате.
Кто-нибудь может мне помочь? Я знаю, что концепция неверна, но это не моя работа, и мне нужно исправить это сейчас.