Создание динамического запроса из таблиц конфигурации с использованием Java - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть требование извлекать данные динамически из нескольких таблиц. Таким образом, у меня есть 2 таблицы конфигурации для хранения информации об этих таблицах. Одна таблица содержит информацию о списке таблиц, как показано ниже:

TableName    TableCode    TableColumn
----------------------------------------
 a             a             a1
 a             a             a2
 b             b             b1
 b             b             b2
 b             b             b3
 c             c             c1
 c             c             c2
 d             d             d1
 d             d             d2

У меня есть другая таблица, в которой хранятся отношения между этими таблицами:

RelationshipType    TableCode1    TableCode2    TableColumn1    TableColumn2 
-----------------------------------------------------------------------------   
  inner                a            b              a1             b1
  inner                a            b              a2             b2
  inner                c            d              c1             d1
  inner                c            b              c2             b3

На основе вышеуказанной конфигурации мне нужно создать динамический запрос, как показано ниже:

select a.a1, a.a2, b.b1, b.b2, b.b3, c.c1, c.c2, d.d1, d.d2 
from b
inner join a on b.b1 = a.b1 and b.b2 = a.b2
inner join c on b.b3 = c.c2
inner join d on c.c1 = d.d1

Теперь объединения могут быть внутренними, левыми или правыми, а порядок вставки в таблицу отношений может быть любым, но между всеми объединенными таблицами определенно будет связь. Каков наилучший оптимизированный способ создания динамического запроса? Должен ли я искать в таблице отношений наиболее родительскую таблицу, а затем создать дерево, чтобы найти связь с другими таблицами? Должен ли я поддерживать последовательность в таблице отношений для поиска самой родительской таблицы и соответствующих таблиц?

1 Ответ

0 голосов
/ 09 апреля 2019

Шаги:

  1. выберите * из порядка взаимосвязи table_list для внутреннего соединения таблицы, условие необходимо объединить)

  2. цикл по каждой строке, если предыдущий код таблицы и текущий код таблицы совпадают, добавьте только условие в 'conditionstring'. Если нет, добавьте новое объединение с именами и условиями таблицы в 'conditionstring'. добавить столбцы в «columnlist».

  3. Теперь 'select' + columnlist + 'from' + conditionstring должно дать вам запрос

Надеюсь, это поможет вам

...