Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Проектирование БД


Автор: WTF4XZ 5.9.2014, 07:51
Всем радушное приветствие!

Вопрос, теоритического плана.

Что бы лучше было понимать, буду задавать вопрос на основе примера:

Предположим есть 4х таблицы, 2х таблицы это дочерние (справочники) и две таблицы основные

Table1
ID_Table1 ; Value1_1 ; Value1_2

Table2
ID_Table2 ; Value2_1 ; Value2_2

Table3
KeyValue ; ID_table1 ; Value3_1

Table4
KeyValue ; ID_table2 ; Value4_1


Далее имеются связки 1 к несколько (т.е. для Table1 поле ID_Table1 является уникально и ключём и по нему хочу подтягивать информацию)


И теперь мне надо в результате получить, внутренней обработкой в MS SQL Express 2008 R2 таблицу

OutPut
KeyValue ; ID_table1 ; Value3_1 ; Value1_1 ; Value1_2 ; ID_table2 ; Value4_1 ; Value2_1 ; Value2_2

По сути строится на связке из двух таблиц по полю KeyValue (таблиц Table3 и Table4)

Не могу понять, как мне это получить... таблицы сделал, связки сделал а на создание итоговой таблицы не хватает идей. Потому что кол-во полей будет слишком большое (в фактической, где имеется 20х справочников и 3х основных таблицы).

Может это конечно возможно обрабатывать через Query с соответствующим запросом. Но вопрос опять же теоретический, можно ли ставить в экспресе этого на планирование (думаю это будет продолжительная операция) + результат выполнения как можно хранить? Есть ли возможность это в SCV к примеру экспортировать...

И как итог, понятный по выше изложенному, недостаточно в мозге данных, непонимаю куда копать...


Спасибо заранее!

Автор: Akina 5.9.2014, 10:00
Цитата(WTF4XZ @  5.9.2014,  08:51 Найти цитируемый пост)
на связке из двух таблиц по relation полей KeyValue.

Вот этот момент совершенно невменяем. Перефразируй так, чтобы было понятно, что имеется в виду.

Автор: WTF4XZ 5.9.2014, 11:01
Akina, перефразировал через редкатирование основного поста.

По сути поле KeyValue уникально, как для Table3 так и для Table4, т.е. по сути может выступать ключём для итоговой таблицу.

Наверно слишком спутанно излогаю свою мысль, если на простом примере:

Пусть будет, что в итоге надо получить полную информацию про лес, имея сведения про ветки и плоды, а номера деревьев уникальны и равны для двух таблиц.

Table3 = ВеткиДеревьев
Table4 = ПлодыДеревьев

Соответственно по KeyValue = ID_Дерева я хочу сложить таблицу, которая будет выглядить как:

ID_Дерева   ВеткиДеревьев
   1                        10
   3                        4

ID_Дерева    ПлодыДеревьев
   2                       8
   3                       1

ID_Дерева   ВеткиДеревьев   ПлодыДеревьев
   1                        10                     0
   2                        0                       8
   3                        4                       1


Проблемность, возникла именно из за того, что в одной таблице набор ID не совпадает с ID другой таблицы (т.е. вложить недостающие записи)

Думал над вариантом что разбить на две части:
1) к таблице ВеткиДеревьев добавляем столбец из ПлодыДеревьев
2) Через исключение строк, которые есть в ВеткиДеревьев записи добавляем в ПлодыДеревьев

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

Но может быть это можно сделать как то проще?

Автор: ТоляМБА 5.9.2014, 11:28
Цитата(WTF4XZ @  5.9.2014,  13:01 Найти цитируемый пост)
ID_Дерева   ВеткиДеревьев
   1                        10
   3                        4

ID_Дерева    ПлодыДеревьев
   2                       8
   3                       1

ID_Дерева   ВеткиДеревьев   ПлодыДеревьев
   1                        10                     0
   2                        0                       8
   3                        4                       1


Код
SELECT        dbo.Table_ID.ID, ISNULL(dbo.Table_Tree.TreeValue, 0) AS Tree, ISNULL(dbo.Table_Twig.TwigValue, 0) AS Twig
FROM            dbo.Table_ID LEFT OUTER JOIN
                         dbo.Table_Twig ON dbo.Table_ID.ID = dbo.Table_Twig.ID LEFT OUTER JOIN
                         dbo.Table_Tree ON dbo.Table_ID.ID = dbo.Table_Tree.ID
ORDER BY dbo.Table_ID.ID

Автор: WTF4XZ 5.9.2014, 14:12
ТоляМБА, похоже на правду, пойду проверять. Но выглядит как то, что надо, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)