Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Запрос к 2м таблицам, объединенным отн. многие-ко-многим   Найти похожие ветки 

 
Николай_Москва   (2006-08-29 22:23) [0]

Привет!
Есть одна проблема, переделкой структуры БД не решить, т.к. переделывать запрещено. Есть Oracle9 + программа работы с БД на Дельфи 7. Теперь постановка задачи (упрощаю, оставляю только смысл). В БД есть две таблицы – главная и подчиненная, но связь по внешнему ключу подчиненной и главной отсутствует – удаление и контроль данных осуществляется с помощью триггеров.

Столбцы 1ой таблицы
Code – Код пары объектов, сюда при расчете заносятся объекты, выделенные в пары, парам присваивается числовой идентификатор. Таким образом, в таблице существуют описания пар (по две строки с одинаковым номером пары)
Name – название оборудования, входящего в пару
Местоположение – местоположение оборудования, входящего в пару.
Итак, главная таблица обеспечивает описание пар оборудования в двух строках, каждой паре присваивается код.

Столбцы 2ой таблицы
Code – Код пары объектов, сюда также на разных этапах расчета заносятся объекты, выделенные в пары, которым присвоен числовой номер, записанный также в первой таблице. Таким образом, в таблице существуют также описания тех же пар пар (по две строки с одинаковым номером пары)
Расчетные данные – данные, полученные в процессе расчета.

1ая таблица является главной по отношению ко второй, однако тип связи получается многие-ко-многим, конкретно 2 к 2. явную связь по ключу установить нельзя, поэтому связи отслеживаются с помощью триггеров (например, удаление данных). Теперь вопрос:
Требуется написать запрос к 1й и 2й таблице, результатом которого являлась бы следующая структура данных (первая часть результатов повторит содержимое 1ой таблицы):

Код пары 1 | Name (1я таблица) Оборудование 1| Местоположение (1я таблица) | Расчетные данные (2я таблица)
Код пары 1 | Name (1я таблица) Оборудование 2| Местоположение (1я таблица) | Расчетные данные (2я таблица)
Код пары 2 | Name (1я таблица) Оборудование 3| Местоположение (1я таблица) | Расчетные данные (2я таблица)
Код пары 2 | Name (1я таблица) Оборудование 4| Местоположение (1я таблица) | Расчетные данные (2я таблица)
Код пары 3 | Name (1я таблица) Оборудование 5| Местоположение (1я таблица) | Расчетные данные (2я таблица)
Код пары 3 | Name (1я таблица) Оборудование 6| Местоположение (1я таблица) | Расчетные данные (2я таблица)

То есть, SQL-запрос должен объединить пары (две строки) из 1й и 2й таблиц.

Попытался объяснить развернуто, теперь кратко:
Вот примеры данных таблиц:
1я таблица
1 - Банка - Подвал
1 - Крышка - Набанке
2 - Ведро - Огурцы
2 - Задача - Не решается
2я таблица
1 - 15
1 - 20
2 - 33
2 - 9
связаны только формально по парам (первый) столбец. И как сформировать SQL отчет вида
1 - Банка - Подвал - 15
1 - Крышка - На банке - 20
2 - Ведро - Огурцы - 33
2 - Задача - не решается - 9

Очевидно, что в лоб задачу не решить, какие могут быть правильные действия для  решения проблемы. Сильно модифицировать структуру БД запрещено постановкой задачи.
Спасибо.


 
Desdechado ©   (2006-08-29 22:44) [1]

не понял, а по какому принципу получаем
1 - Банка - Подвал - 15
а не
1 - Банка - Подвал - 20
из сути связи это никак не следует


 
Николай_Москва   (2006-08-29 22:49) [2]

связи идут по первому столбцу (там идентификаторы пар) - в данном случае пара №1


 
Desdechado ©   (2006-08-29 22:54) [3]

ну, связь по первому столбцу
в обоих строках 1
как определить, для какой из двух строк какую из других двух строк другой таблицы дать 9естественно, при совпадении ID)


 
Николай_Москва   (2006-08-29 23:02) [4]

объекты, находящиеся в первой и второй таблице не связаны между собой - связь формальная "по такой-то паре объектов была рассчитана такая-то пара значений", причем к какому объекту относится конкретный результат из пары - не важно, да и по задаче определить нельзя (результат получается из совокупности)


 
ANB ©   (2006-08-30 09:27) [5]


> (результат получается из совокупности)

Ну и какая цифра должна быть для 1-й пары 15 или 20 ? Или их сумма ?

Вообще то запрос элементарный.


 
Николай_Москва   (2006-08-30 11:21) [6]

для первой пары должен быть такой результат запроса
1 - Банка - Подвал - 15
1 - Крышка - На банке - 20


 
Sergey13 ©   (2006-08-30 11:26) [7]

> [6] Николай_Москва   (30.08.06 11:21)
> для первой пары должен быть такой результат запроса

Если это жесткое условие, то задача на этой структуре нерешаема в принципе, ИМХО, так как нет номера строки в паре.


 
Desdechado ©   (2006-08-30 12:02) [8]

> для первой пары должен быть такой результат запроса
Почему не наоборот? И почему не 4 комбинации? По таблицам невозможно определить, что с чем связать для кода 1.


 
ANB ©   (2006-08-30 12:51) [9]

Телепатирую - для первой строки взять меньшее число, для второй - большее. Гы.


 
Desdechado ©   (2006-08-30 13:40) [10]

ANB ©   (30.08.06 12:51) [9]
а с огурцами - наоборот...
тренируйся :)


 
fishka   (2006-08-30 13:54) [11]

Идея: в запросе к каждой из таблиц проставляется номер строке. Запросы соединяются по номерам строк.
Реализация (MS SQL) см ниже:

select * from (select count (x_2.id_ves) as rank, x_1.id_ves, x_1.x25_ves
from x25_ves as x_1 inner join x25_ves as x_2 on
x_1.id_ves >= x_2.id_ves
group by x_1.id_ves, x_1.x25_ves) a
join (select count (x_2.id_own) as rank, x_1.id_own
from own as x_1 inner join own as x_2 on
x_1.id_own >= x_2.id_own
group by x_1.id_own) b
on a.rank=b.rank
order by a.rank


 
ANB ©   (2006-08-30 13:56) [12]


> fishka   (30.08.06 13:54) [11]

А номера строк сгенерятся как бог на душу положит :) Гы еще раз.


 
fishka   (2006-08-30 14:27) [13]


> А номера строк сгенерятся как бог на душу положит :) Гы
> еще раз.

Нет. Как индексы в таблицах назначены.


 
ANB ©   (2006-08-30 14:41) [14]

Вобщем то решение следующее :
1. Добавляем в обе таблицы по полю связки.
2. Ручками эти связки проставляем как надо.
3. Рисуем элементарный запрос.


 
Desdechado ©   (2006-08-30 15:42) [15]

Я бы обошелся проще.
Если известно, что всегда только пары, то почему их не загнать в одну запись вместо двух?


 
ANB ©   (2006-08-30 16:26) [16]


> Desdechado ©   (30.08.06 15:42) [15]

Это уже значительная переделка структуры БД :)


 
Николай_Москва   (2006-08-30 18:10) [17]

Спасибо, коллеги проблема решена. Уломал-таки изменить немного таблицы - ввести подя связки.
Спасибо за варианты.



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
15-1160216882
AlexanderMS
2006-10-07 14:28
2006.10.29
Как они говорят по-русски?


15-1159946070
Holy
2006-10-04 11:14
2006.10.29
Посоветуйте векторный граф.редактор


15-1160481444
Petr V. Abramov
2006-10-10 15:57
2006.10.29
Oracle Developer vs Delphi


15-1160172617
ProgRAMmer Dimonych
2006-10-07 02:10
2006.10.29
Глюки ADSL а


2-1160479769
Darkwing
2006-10-10 15:29
2006.10.29
Как получить иконку из расширения файла?