Возможно ли иметь выборочные запросы в PostgreSQL, которые выбирают разные таблицы/столбцы на основе значений уже выбранных строк?
В принципе, у меня есть таблица, в которой каждая строка содержит последовательность из двух-пяти символов (tbl_roots
), необязательно с полем длины, которое определяет, сколько символов должна содержать последовательность (она должна быть сделанный избыточным, когда я выясню лучший способ, т.е. подсчитав длину последовательностей).
Существует четыре таблицы, содержащие шаблоны (tbl_patterns_biliteral
, tbl_patterns_triliteral
,... и т.д.), каждая из которых соответствует root_length
и пятой таблице (tbl_patterns
), которая используется для синхронизации шаблона таблицы путем предоставления идентификатора для каждой строки, поэтому строка # 2 в tbl_patterns_biliteral
соответствует той же строке в tbl_patterns_triliteral
. Шесть таблиц шаблонов ограничены таким образом, что ни одна строка в tbl_patterns_(bi|tri|quadri|quinqui)literal
не может иметь pattern_id
, которая не существует в tbl_patterns
.
Каждая таблица шаблонов содержит девять других столбцов, которые соответствуют идентификатору (root_form
).
Последняя таблица в базе данных (tbl_words
) содержит столбец для каждой из основных таблиц (word_id
, root_id
, pattern_id
, root_form
, word
). Каждое слово определяется как корень определенной длины и формы, сплайсированный в конкретный шаблон. Склеивание относительно просто: translate(pattern, '12345', array_to_string(root, '')) as word_combined
выполняет задание.
Теперь я хочу выбрать соответствующую таблицу шаблонов на основе длины последовательности в tbl_roots
и выбрать соответствующий столбец в таблице шаблонов на основе значения root_form
.
Как это можно сделать? Может ли он быть объединен в простой запрос, или мне нужно сделать несколько проходов? После того, как я построил этот запрос, я смогу записать его в PHP script, который может выполнять поиск в моей базе данных.
ИЗМЕНИТЬ
Вот некоторые примеры данных (это фактически данные, которые я использую в данный момент) и еще несколько объяснений относительно того, как работает система: https://gist.github.com/823609
Это концептуально проще, чем кажется на первый взгляд, особенно если вы думаете об этом как о системе координат.