Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2016, 18:58   #1
Raizel
 
Регистрация: 21.01.2015
Сообщений: 7
По умолчанию Запрос на выборку из нескольких таблиц

Всем доброго времени суток!
Вопрос заключается в следующем: есть бд, в ней много таблиц, в будущем надо будет часто доставать данные из разных таблиц. Знаю информации более чем предостаточно, но проблема только в том что я никак не могу понять, как мне правильно делать выборку сразу из нескольких таблиц с условием.

Покажите на моем примере, кому не сложно, как правильно обьединять эти таблицы...

Пример двух моих самых простых таблиц:

table "costs"
--------------------------------------------
id | дата | сумма | кому | примечания
--------------------------------------------
1 | 01.01.2016 | 500 | Максим | "пусто"
2 | 07.01.2016 | 100 | Максим | "пусто"


table "delivery"
--------------------------------------------------------------------------------------
id | дата | сумма | поставщик | расчет | номер поставки |
--------------------------------------------------------------------------------------
1 | 03.01.2016 | 300 | Максим | долг | 10
2 | 09.01.2016 | 200 | Максим | расчет | 24



В итоге, после соединения двух таблиц должно получится:
--------------------------------------------------------------------------------------
дата | операция | сумма | поставщик | примечание | расчет | номер поставки |
--------------------------------------------------------------------------------------
01.01.2016 | расход | 500 | Максим | "пусто"|"пусто"| "пусто"
03.01.2016 | приход | 300 | Максим |"пусто" | долг | 10
07.01.2016 | расход | 100 | Максим |"пусто" | "пусто"|"пусто"
09.01.2016 | приход | 200 | Максим |"пусто" | расчет | 24

Сортировка итоговой таблицы будет по дате. Программа на делфи 7. Соединение с БД посредством Microsoft.Jet.OLEDB.4.0. Все имена полей позже будут переведены на англ, сейчас просто для удобства восприятия). Все поля являются текстовыми, кроме (естественно) поля "id".
Заранее БЛАГОДАРЮ всех кто не пройдет мимо !
Raizel вне форума Ответить с цитированием
Старый 26.08.2016, 19:02   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Запрос с одной и запрос c другой таблицы, объеденить, используя union, и общий order by
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.08.2016, 19:49   #3
Raizel
 
Регистрация: 21.01.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Запрос с одной и запрос c другой таблицы, объеденить, используя union, и общий order by
Я тоже так думал, но либо я что то не правильно делал (у меня все записи дублируются несколько раз, и в перемешку сливаются с данными другой таблицы), либо есть другой, более рациональный подход) Поэтому подумываю в сторону правильной выборки. Вот только с ней у меня тоже оказались проблемы...
Raizel вне форума Ответить с цитированием
Старый 26.08.2016, 19:52   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Запрос свой изобрази здесь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.08.2016, 20:43   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

усё, не придет больше))
come-on вне форума Ответить с цитированием
Старый 28.08.2016, 21:53   #6
Raizel
 
Регистрация: 21.01.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Запрос с одной и запрос c другой таблицы, объеденить, используя union, и общий order by
Нашел свою проблему при создании такого запроса, записи уже не дублируются, и не путаются. Вот только появился новый вопрос. Не подскажите, как мне добавить эти недостающие поля "расчет, примечание..." которые есть только в одной из таблиц и нет в другой?

На данный момент у меня получился вот такой запрос:

SELECT costs.дата, costs.сумма, costs.кому FROM costs WHERE costs.кому = 'Максим' UNION SELECT delivery.дата, delivery.сумма, delivery.поставщик FROM delivery WHERE delivery.поставщик = 'Максим'
Raizel вне форума Ответить с цитированием
Старый 28.08.2016, 21:55   #7
Raizel
 
Регистрация: 21.01.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
усё, не придет больше))
???
Raizel вне форума Ответить с цитированием
Старый 28.08.2016, 22:41   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Можно примерно в таком духе
Код:
SELECT costs.дата, costs.сумма, costs.кому,расчет 
  FROM costs 
  WHERE costs.кому = 'Максим' 
UNION 
SELECT delivery.дата, delivery.сумма, delivery.поставщик , null as расчет
  FROM delivery 
  WHERE delivery.поставщик = 'Максим'
ORDER BY 1
PS - кириллические имена полей - жди возможных проблем
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запрос из нескольких таблиц govorun1 БД в Delphi 4 02.01.2014 17:13
Запрос на выборку из нескольких таблиц bullvinkle Microsoft Office Access 9 11.04.2012 04:35
Запрос с нескольких таблиц Lokos БД в Delphi 3 15.04.2011 07:43
Не могу составить запрос на выборку из нескольких таблиц :( Semidarckness SQL, базы данных 3 23.05.2010 15:27
sql запрос на выборку записей из двух связанных таблиц Люсьен БД в Delphi 9 20.04.2009 16:07