Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выбор неповторяющихся значений из нескольких таблиц / 10 сообщений из 10, страница 1 из 1
21.02.2014, 11:31:02
    #38568573
tanyxa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
Доброго дня. Натолкните плиз на правильный путь. Дано:
Firebird 2.5 и таблицы:

Главная таблица

Main_Table
ID NAME N_PART 1 Уголок равнополочный партия № 315 2 Уголок равнополочный партия № 100

и дочерние:

HARDNESS_Table
ID_MAIN ID HARDNESS1 HARDNESS2 1 1 35.0 11.2 1 2 23.5 10.58 1 3 12.7 34.21 2 1 35.0 11.2 2 2 23.5 10.58 2 3 12.7 34.21

TENSION_Table
ID_MAIN ID TENSION1 TENSION2 TENSION3 1 1 0.1 0.15 значение 1 1 2 0.3 0.17 значение 2 1 3 0.2 0.17 значение 1 2 1 0.1 0.12 значение 1 2 2 0.3 0.15 значение 3 2 3 0.6 0.12 значение 1

на самом деле дочерних таблиц больше - но для демонстрации принципа думаю достаточно. Так вот задача:

Нужно из главной таблицы вывести только те строки, для которых наборы атрибутов в дочерних таблицах отличаются. Неодинаковое количество строк в дочерних таблицах тоже считается различием.
...
Рейтинг: 0 / 0
21.02.2014, 13:46:08
    #38568768
venoel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
tanyxa,

1. Получить множество Main_Table, с которыми работать (М1).
2. Получить набор уникальных свойств по одному критерию (по HARDNESS_Table например) (R1).
3. Используя R1 и М1 получить номер Main_Table.id (N1) (
Код: plsql
1.
2.
3.
4.
 for each R1
 select first 1 
 from HARDNESS_Table 
 where id_main in (M1) and HARDNESS1, HARDNESS2 in (R1)

)
4. Записать N1 в множество М2
5. Повторить п.1 для следующей дочерней таблицы.


М1 R1 М2
1 12.3 123.6 45.5 1
2 123.34 23 17 2
3

R2
12 13 134
5 56 56
...
Рейтинг: 0 / 0
21.02.2014, 13:50:01
    #38568777
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
venoel,

это вы ля какой субд такой запрос написали? Лично я вовсе не понял чего автор хотел.
...
Рейтинг: 0 / 0
21.02.2014, 14:00:30
    #38568799
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
tanyxaвывести только те строки, для которых наборы атрибутов в дочерних таблицах
отличаются
Отличаются от чего?

По-любому, full outer join + having count должны бы помочь...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.02.2014, 14:49:44
    #38568853
tanyxa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
уточняю суть вопроса. Нужно отобрать только те записи из главной таблицы, для которых атрибуты перечисленные в дочерних таблицах разные. Например если у уголка из партии 315 все записи в таблицах HARDNESS_Table и
TENSION_Table такие же как у уголка из партии 100 - то нужно показать только одну запись - либо уголок партии 315, либо партии 100. В противном случае - показать обе записи
...
Рейтинг: 0 / 0
21.02.2014, 14:55:14
    #38568863
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
tanyxa,

тут поможет обычный distinct
...
Рейтинг: 0 / 0
21.02.2014, 15:07:42
    #38568877
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
Симонов Денистут поможет обычный distinct
Не поможет если не аггрегировать записи из дочерних таблиц. Придётся писать такой
навороченный и тормозной запрос, что я его даже придумать сходу не могу. Что-то с NOT
EXISTS и уже вышеназнанными full outer join + count(distinct).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.02.2014, 15:27:49
    #38568901
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
А что-то вот такое????

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select m1.* from Main_Table m1
left join Main_Table m2 on m1.name=m2.name and m1.id <> m2.id

left join HARDNESS_Table h1 on h1.ID_MAIN=m1.id
left join HARDNESS_Table h2 on h2.ID_MAIN=m2.id and h2.id<>h1.id 

left join TENSION_Table  t1 on t1.ID_MAIN=m1.id
left join TENSION_Table  t2 on t2.ID_MAIN=m2.id and t2.id<>t1.id 

where m2.id is null or  h1.HARDNESS1 <> h2.HARDNESS1 or h1.HARDNESS2 <> h2.HARDNESS2 or t1.TENSION1 <> t2.TENSION1
...
Рейтинг: 0 / 0
21.02.2014, 15:29:27
    #38568907
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
m7m,

боюсь этот запрос будет дико тормозить даже при небольшом количестве данных
...
Рейтинг: 0 / 0
21.02.2014, 15:32:20
    #38568916
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор неповторяющихся значений из нескольких таблиц
Симонов Денисm7m,

боюсь этот запрос будет дико тормозить даже при небольшом количестве данных
как то неуверенно ты написал
Он точно будет тормозить.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выбор неповторяющихся значений из нескольких таблиц / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]