Создание динамического запроса из таблиц конфигурации с использованием Java

#java #sql #sql-server #database #data-structures

#java #sql #sql-сервер #База данных #структуры данных

Вопрос:

У меня есть требование динамически извлекать данные из нескольких таблиц. Итак, у меня есть 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
  

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

Комментарии:

1. Не могли бы вы сообщить, какую СУБД вы используете?

2. Это Microsoft SQL Server 2014

3. Привет, вы нашли решение этой проблемы?

Ответ №1:

Шаги:

  1. выберите * из порядка таблицы внутренних соединений relationship_table по типу RelationshipType desc, TableCode1, TableCode2 (Порядок RelationshipType обусловлен тем, что сначала всегда выполняется внутреннее объединение. И упорядочение табличных кодов связано с тем, что если следующее отношение также включает в себя те же таблицы, условие должно быть объединено)

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

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

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