Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 21.12.2016, 07:33   #1
Lokos
Участник клуба
 
Регистрация: 29.09.2009
Адрес: Владивосток
Сообщений: 587
Репутация: 55
По умолчанию Запрос из трех таблиц, дубли информации

Добрый день возникла необходимость собрать данные из 3х связанных таблиц но получается не так как хотелось бы
Есть три таблички
1: `tbDoma`
Street
Home
2:`tbOptions_doma`
Name
Value
Dom_id
3: `tbObject_Beside`
Name
distance
Dom_id

Собственно сам запрос ( так же пробовал делать с joint'ами но результат тот же)
Код:

SELECT 
   `tbDoma`.Street,
   `tbDoma`.Home,
   `tbOptions_doma`.Name,
   `tbOptions_doma`.Value,
   `tbObject_Beside`.`Name` 
   `tbObject_Beside`.`distance` 
FROM 
   `tbOptions_doma`, `tbDoma`,`tbObject_Beside` 
WHERE
   `tbDoma`.Street='Амурская' AND `tbDoma`.Home='84' AND 
   `tbOptions_doma`.Dom_id=`tbDoma`.id AND
    `tbObject_Beside`.Dom_id =    `tbOptions_doma`.Dom_id

Результат не вдохновляет
Амурская 84 Тип здания жилое многоквартирное Автомойка 250 м.
Амурская 84 Тип здания жилое многоквартирное Автостоянка 250 м.
Амурская 84 Тип здания жилое многоквартирное Аптека 350 м.
............................пока не выведутся все поля таблицы Beside................
Амурская 84 Ввод в эксплуатацию 1963 г. Автомойка 250 м.
Амурская 84 Ввод в эксплуатацию 1963 г. Автостоянка 250 м.
и т.д.

Как такого можно избежать, что то не получается не чего придумать
или лучше разбить данный запрос на 3? сперва найти ld а по нему остальные значения 2х таблиц?

Последний раз редактировалось Lokos; 21.12.2016 в 08:32.
Lokos вне форума   Ответить с цитированием
Старый 21.12.2016, 08:35   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк, Украина
Сообщений: 15,599
Репутация: 5692
По умолчанию

А что получить то нужно и не написал. На примере лучше
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 21.12.2016, 10:05   #3
Lokos
Участник клуба
 
Регистрация: 29.09.2009
Адрес: Владивосток
Сообщений: 587
Репутация: 55
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А что получить то нужно и не написал. На примере лучше
получить нужно результат без дублирования, тоесть

Амурская 84 Тип здания жилое многоквартирное Автомойка 250 м.
Амурская 84 Ввод в эксплуатацию 1963 г. Аптека 250 м.
Амурская 84 null Заправка 300м
Lokos вне форума   Ответить с цитированием
Старый 21.12.2016, 10:13   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк, Украина
Сообщений: 15,599
Репутация: 5692
По умолчанию

А откуда узнать, что автомойку прицепить к типу здания, аптеку к к вводу в эксплуатацию, а заправку ни к чему? Просто запросом не сделать, хранимка с кусорами, REPEAT, FETCH и прочее. Или программно из парочки запросов
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.12.2016 в 10:31.
Аватар на форуме   Ответить с цитированием
Старый 21.12.2016, 10:35   #5
Lokos
Участник клуба
 
Регистрация: 29.09.2009
Адрес: Владивосток
Сообщений: 587
Репутация: 55
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А откуда узнать, что автомойку прицепить к типу здания, аптеку к к вводу в эксплуатацию, а заправку ни к чему? Просто запросом не сделать, хранимка с кусорами, REPEAT, FETCH и прочее. Или программно из парочки запросов
не так объяснил наверное, знать не чего и не нужно, даже и не знаю как объяснить, впринцыпе сделал все в пару запросов нормально работает
Lokos вне форума   Ответить с цитированием
Старый 21.12.2016, 10:41   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк, Украина
Сообщений: 15,599
Репутация: 5692
По умолчанию

Покажи как в пару запросов.
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 21.12.2016, 10:51   #7
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,163
Репутация: 1843
По умолчанию

Код:

select ... --тип здания
UNION 
select ... --ввод в экспл.
UNION
select ... -- близлежащие объекты

ЕСЛИ ...
"повезет" и будут одинаковые типы и количество данных.
__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 21.12.2016, 13:20   #8
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,163
Репутация: 1843
По умолчанию

Код:

select left.*, right.*
from ( select 1 as nn, ...
  union select 2 as nn, ....
     ) as left_t
RIGHT JOIN ( select ??? as nn, .....
    ) as right_t on right_t.nn =left_t.nn

ЕСЛИ ...
1. найдется чем заменить ??? в последнем вложенном запросе (recno ? )
или же найдется возможность написать функцию (вычислимое поле) для этого.
обычно это
Код:

select ... , ( select count() from where ? < ? ) as nn  from ... order by ?

2. первые два запроса "отдадут" ровно по одной записи.
__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 21.12.2016, 13:33   #9
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк, Украина
Сообщений: 15,599
Репутация: 5692
По умолчанию

Тоже подумал сгенерить что-то типа порядкового номера и к нему цепляться. Но это же не эффективно. Не лучше курсора и программного способа. И вообще такой способ выдачи данных мне не понятен, что-то ТС не то делает. Отобрази на форме основную табличку с домами, информация описательного характера как у него в отдельных дочерних отображается для текущей строки основной таблицы. И связь Master-Detail или в AfterScroll
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 21.12.2016, 14:02   #10
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 107
Репутация: 25
По умолчанию

Код:

select t.Street,t.Home,t.Name,t.Value ,t.distance from
(
SELECT 
   `tbDoma`.Street as Street ,
   `tbDoma`.Home as Home ,
   `tbOptions_doma`.Value as Value ,
   `tbObject_Beside`.`Name` as Name, 
   `tbObject_Beside`.`distance`as distance
FROM 
   `tbOptions_doma`, `tbDoma`,`tbObject_Beside` 
WHERE
   `tbDoma`.Street='Амурская' AND `tbDoma`.Home='84' AND 
   `tbOptions_doma`.Dom_id=`tbDoma`.id AND
    `tbObject_Beside`.Dom_id =    `tbOptions_doma`.Dom_id
) as t 
group by  t.Street,t.Home,t.Name,t.Value ,t.distance
 order by  t.Street,t.Home,t.Name,t.Value ,t.distance

Качество кода не гарантирую. Работаю с MsSQL,Firebird подобное там выполнить можно
__________________
Пишу много и развернуто

Последний раз редактировалось Heneken87; 21.12.2016 в 14:19.
Heneken87 вне форума   Ответить с цитированием
Ответ



Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение двух таблиц исключая дубли AVGRIN Microsoft Office Excel 3 13.01.2013 21:52
Связь трех таблиц Paradox для дальнейшего расчета tglhteam Язык SQL 0 22.07.2011 14:24
Вывести записи из трех таблиц Demares Язык SQL 6 02.03.2011 14:30
select-запрос из трех таблиц AJlEKCA БД в Delphi 10 19.01.2011 02:38
как свзять в Дельфи более трех таблиц воедино ahvahsky2008 Помощь студентам 1 10.03.2010 12:36




13:30.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


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

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru