Я думаю, вам придется изменить структуру ваших таблиц, чтобы иметь какую-то надежду.Вот первый черновик, о котором вы должны подумать.Я не уверен, каково значение «i», «ii» и «iii» в именах ваших столбцов.По моему незнанию, я предполагаю, что они значат для вас, поэтому я сохранил их в таблице ниже.(Я сохранил их информацию как целые числа. Легко изменить ее на строчные римские цифры, если это имеет значение.)
create table patterns_bilateral (
pattern_id integer not null,
root_num integer not null,
pattern varchar(15) not null,
primary key (pattern_id, root_num)
);
insert into patterns_bilateral values
(1,1, 'ya1u2a'),
(1,2, 'ya1u22a'),
(1,3, 'ya12u2a'),
(1,4, 'me11u2a'),
(1,5, 'te1u22a'),
(1,6, 'ina12u2a'),
(1,7, 'i1u22a'),
(1,8, 'ya1u22a'),
(1,9, 'e1u2a');
Я почти уверен, что подобную структуру будет гораздо проще запрашивать, но вы знаете,поле лучше, чем я.(С другой стороны, дизайн базы данных - это моя область ...)
В продолжение моего предыдущего ответа и наших комментариев взгляните на этот запрос.(Тестовая таблица даже не в 3NF, но таблица сейчас не важна.)
create table test (
root_id integer,
root_substitution varchar[],
length integer,
form integer,
pattern varchar(15),
primary key (root_id, length, form, pattern));
insert into test values
(4,'{s,ş,m}', 3, 1, '1o2i3');
Это важная часть.
select root_id
, root_substitution
, length
, form
, pattern
, translate(pattern, '12345', array_to_string(root_substitution, ''))
from test;
Этот запрос, среди прочего, возвращаетвещи, перевод soşim
.
Мы движемся в правильном направлении?