Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Вниз

Сравнение нескольких таблиц Paradox   Найти похожие ветки 

 
Денис Курьин   (2003-01-28 17:59) [0]

Уважаемые Мастера, помогите пожалуйста!
Необходимо сравнить две модификации изделия.
Сравнение производится по Обозначению или Наименованию.
Исходные данные в таблицах:
T1 (1-я модиф), T2 (2-я модиф), их структура:
NameSys A (наименование)
Obozn A (обозначение)
FNN A (идентификатор)
Общие таблицы:
Parts (связь с Т1 и Т2 по FNN-FNNP)
FNNP A (идентификатор)
Har I (индекс характеристики)
Znach A (значение характеристики)
Har (связь с Parts по Har-HHar)
HHar I (индекс характеристики)
NameHar A (наименование характеристики)
Пример
При сравнении по обозначению и при условии вывода значений полей: Наименования, Ширины и Длины (1-ой и 2-ой модиф) Grid должен принять следующий вид:
------------------------------------------------------------
obozn NameSys_1 NameSys_2 Ширина_1 Ширина_2 Длина_1 Длина_2
------------------------------------------------------------
1-23 Вал Вал 270 270 147 147
------------------------------------------------------------
1-24 Сошка 317 215
------------------------------------------------------------
1-25 Сошка 350 270
------------------------------------------------------------
1-26 Болт Болт 317 317
------------------------------------------------------------
1-27 Гайка М12 Гайка М16 379 245 425 179
------------------------------------------------------------
Заранее благодарен, Денис.


 
MsGuns   (2003-01-28 18:24) [1]

Используй в запросе связку ALL JOIN


 
Денис Курьин   (2003-01-28 18:34) [2]

MsGuns
Строю запрос с ALL JOIN:
SELECT Tree001.fnn as Field1, Tree001.NameSys as Field2, Tree002.NameSys as Field3, temp001.Znach as Field4,
temp002.Znach as Field5, NameHar as Field6
FROM Tree001, temp001, temp002, har
LEFT OUTER JOIN Tree002
ON (temp001.har=hhar) and (Tree001.fnn = Tree002.fnn) and (tree001.fnn=temp001.fnnp) and (temp001.fnnp = temp002.fnnp)
union
SELECT Tree002.fnn as Field1, Tree001.NameSys as Field2, Tree002.NameSys as Field3, temp001.Znach as Field4,
temp002.Znach as Field5, NameHar as Field6
FROM Tree002, temp001, temp002, har
LEFT OUTER JOIN Tree001
ON (temp002.har=hhar) and (Tree002.fnn = Tree001.fnn) and (tree002.fnn=temp002.fnnp) and (temp002.fnnp = temp001.fnnp)

При этом данные из Parts предварительно разношу по таблицам Temp001 и Temp002, в соответствии с FNN из Tree001 и Tree002. Работает только для 1 значения (ширина, либо длина), а надо для 2-х. Каким образом должен выглядеть запрос?


 
MsGuns   (2003-01-28 19:08) [3]

Господи, да это ж надо левое ухо чесать даже не правойпяткой, а даже не знаю чем !

Зачем предварительная разноска ?
Зачем какие-то временные таблицы ?
Зачем UNION ?
Зачем LEFT OUTER ?

Или я чего-то недопонял или одно из двух 8)))



 
Денис Курьин   (2003-01-28 20:14) [4]

> Зачем UNION ?
Для объединения двух таблиц Т1 и Т2, т.к. данные в Grid выводятся:
в поле Obozn - попадают все обозначения из Т1 и Т2;
в поле NameSys - наименования, которые соответствуют обозначениям из Т1 и Т2 (связка FNN-FNNP);
в поле Ширина - значения из Parts, значение индекса Har у которых равен значению индекса HHar из таблицы Har а имя характеристики - "Ширина" (Поле NameHar);
все остальные столбцы ("Длина" и т.д) - по такой же схеме.

> Зачем предварительная разноска ?
Предварительная разноска нужна, потому что при одновременном объединении Parts берутся одинаковые значения FNNP и Znach для разных модификаций.

> Зачем какие-то временные таблицы ?
Временные таблицы нужны для контроля за процессом.


 
MsGuns   (2003-01-28 21:38) [5]

Судя по твоей картинке грида (сабж), тебе надо записи 2-х таблиц вписать в ОДНУ строку, на в разные группы колонок. Это-то как раз и делается соединением (JOIN).
UNION же добавляет записи одной таблицы к записям, полученным из другой. При этом состав, перечень и типы полей обеих таблиц должны быть идентичны. Т.е. кол-во записей в рез НД будет равно <записи 1-й таблицы>+<записи 2-й таблицы>, а это немного не похоже на то, что у тебя нарисовано.

ИМХО, все делается ОДНИМ запросом, включая подкачку детализаций по обеим таблицам.


 
Денис Курьин   (2003-01-29 10:53) [6]

> Т.е. кол-во записей в рез НД будет равно
Правильно, еще появляются записи с пустым значением Obozn, но от них я избавляюсь с помощью фильтра.

> UNION же добавляет записи одной таблицы к записям, полученным из другой
Так и есть, ведь мне надо получить в поля NameSys именно те значения, которые соответствуют выведенному Obozn, а если такого обозначения нет в 1-й модификации, но обозначение есть во 2-й модификации => NameSys_1 - пустое, а в NameSys_2 - наименование.

> Зачем LEFT OUTER ?
LEFT OUTER указывает на вид соединения (внешн, внутр) и где находится главная таблица, а где подчиненная (слева, справа).

> ИМХО
Все точно в дырочку.


 
MsGuns   (2003-01-29 10:59) [7]

Денис, или у тебя неудачно нарисована картинка с таблицей или ты действительно намудрил и загадил мозги себе, и мне хочешь 9:))

В нарисованной таблице, кстати, вообще не видно отношения Один-ко-многим.


 
Денис Курьин   (2003-01-29 11:20) [8]

Согласен, картинка действительно смазалась и на ней не видно связи, попробую еще раз, но вместо пробелов, точки:
------------------------------------------------------------
obozn.NameSys_1.NameSys_2.Ширина_1.Ширина_2.Длина_1.Длина_2
------------------------------------------------------------
1-23..Вал.......Вал.......270......270......147.....147.....
1-24..Сошка...............317...............215.............
1-25............Сошка..............350..............270.....
1-26..Болт......Болт........................317.....317.....
1-27..Гайка М12.Гайка М16.379......245......425.....179.....


 
Денис Курьин   (2003-01-29 11:25) [9]

Не, точки тоже не прут, тогда вот так: ("_" - пробелы)
obozn__NameSys1__NameSys2__Ширина1__Ширина2__Длина1__Длина2

1-23___Вал_______Вал_______270_______270_____147_____147
1-24___Сошка_______________317_______________215
1-25_____________Сошка_______________350_____________270
1-26___Болт______Болт________________________317_____317
1-27___Гайка М12_Гайка М16_379_______245_____425_____179


 
MsGuns   (2003-01-29 11:57) [10]

Ты не понял 8(
Имелось в виду вот что:
На "Вал", к примеру, есть записи и в Т1 и в Т2, а вот в деталах Д1(>T1) и Д2(>T2) может быть на энтот вал не 1, а 2 или 5 или N значений ширины или длины ? Т.е. твоя картинка как бы продолжается вправо, а число колонок растет. Понял ? Это я и имел в виду под фразой "Один-ко-многим "
Если же Один-ко-многим нет, а есть Один-к-одному, т.е. на одну деталь может быть только одна запись детала с шириной и длиной, то:
- во-первых, мое утверждение, что все делается одним запросом остается в силе,
- во-вторых, зачем тогда деталы вообще ? Может, стоило характеристики засунуть в основную таблицу ?
(Я уж молчуо том, какого черта у тебя ДВЕ таблы, где хранится по-сути одно и то же)


 
Денис Курьин   (2003-01-29 15:10) [11]

> MsGuns
Я думаю, что лучше будет если ты посмотришь небольшой пример того, что я хочу получить. Если ты не против, то вышлю мылом.


 
MsGuns   (2003-01-29 15:44) [12]

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


 
Денис Курьин   (2003-01-29 17:33) [13]

> MsGuns
Че то мыло не прет, говорит типа:
A message that you sent could not be delivered to all of its recipients. The following address(es) failed:
msguns@net.ua:
SMTP error from remote mailer after RCPT TO:<msguns@net.ua>:
host ns.net.ua [62.149.2.12]:
550 5.1.1 <msguns@net.ua>... User unknown
Может на мое мыло сначала чиркнеш, а я отвечу.


 
MsGuns   (2003-01-29 18:17) [14]

У меня в анкете почему-то мыло сломалось.. 8(
Как подправить-не знаю. Пробовал через редактирование анкеты - говорит что нет логина (а по поиску, с$%ка, находит !) Задавал вопрос модераторам, но они проигнорировали.

Вот нормальный маил: MsGuns@ukr.net



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

Форум: "Базы";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
1-52823
sergey_1212
2003-02-07 10:30
2003.02.17
Работа с INI-файлом


14-53255
Uncle Archi
2003-01-30 22:57
2003.02.17
Моя игра


8-53123
vts
2002-11-04 08:20
2003.02.17
как можно узнать параметры из AVi ?


14-53276
bomberman
2003-02-01 03:18
2003.02.17
Проблема с загрузкой Delphi 5


14-53203
Карелин Артем
2003-01-31 15:43
2003.02.17
Загоны домашних животных.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский