Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать sql запрос к нескольким таблицам (ADO,MS Access)?


Страницы:   1 2 3

gedevan ©   (2016-01-08 14:52:00) 

есть несколько таблиц которые на выходе запроса я хочу превратить в одну. Причем в интернете описывается как одну таблицу присоединить к другой (т.е. делается соединение приклеиванием справа колонок другой таблицы). Мне же нужно, чтобы мои таблицы в результирующей выборки шли одна за другой. Причем в таблицах есть как одинаковые колонки, так и уникальные для каждой таблицы. Т.е. как сделать чтобы в итоговой выборке совпадающие по имени колонки совместились (по вертикали), а несовпадающие также присутствовали в итоговой выборке, но в тех частях данных которые соответствуют таблицам где такой колонки нет, там просто были бы пустые значения. И еще как прикрутить к этой таблице колонку "Имя таблицы" и записать в него имя таблицы из которой собственно эти данные в выборку и попали?

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


sniknik   (2016-01-09 00:37:00) [41]

> Неправильно определен объект Parameter.
задано 4-ре,  определен 1, естественно остальные неправильны.
> А если вместо ADOQuery.SQL.Text := SQLText; оставить закоментированную строку, то все работает...
тут и задана и определена одна переменная.

> и вообще как он названия определяет колонок?
прочитай в документации/книжке по sql. там все подробно.

и еще совет - 1: пиши понятнее, без мусора. 2: проверяй на простых, просто таки элементарных запросах. 3: используй ADODataSet.


Германн   (2016-01-09 00:04:00) [42]

Ты бы хоть привел структуры этих таблиц, их взаимосвязи (если они есть) и что ты хочешь получить в наборе данных в результате своего запроса. На форумах нет экстрасенсов.


gedevan   (2016-01-08 21:37:00) [43]

и еще я не понимать, как называется первая и последняя колонка в этом запросе (т.к. в реальной таблице первой колонки нет вообще, а последняя есть только в последней таблице)? да и вообще как он названия определяет колонок?


gedevan   (2016-01-08 21:30:00) [44]

   SQLText := 'Select ''Tem'',ShotNumber,' +
   'Name,ItemName,NumberOfSearch,tempfound,itIsTemplate,anotherTime' +
   'SearchFixed,x1,x2,y1,y2,ksov,searchtime,FourSearch,NameConnectedScreen,NULL ' +
   'FROM Templates where ShotNumber = :prm' +

   'UNION' +

   'Select ''Dyn'',ShotNumber, ' +
   'Name,NumberOfSegment,null,null,null,null,null,x1,x2,y1,y2,null,searchtime,'
   + 'null,NameConnectedScreen,NULL ' + 'FROM DynObj where ShotNumber = :prm' +

   'UNION' +

   'Select ''Col'',ShotNumber, ' +
   'Name,NumberOfSegment,null,null,null,null,null,x1,x2,y1,y2,null,searchtime,'
   + 'null,NameConnectedScreen,NULL ' + 'FROM ColorSearch where ShotNumber = :prm' +

   'UNION' +

   'Select ''Tex'',ShotNumber, ' +
   'Name,NumberOfSegment,null,null,null,null,null,x1,x2,y1,y2,null,searchtime,'
   + 'null,NameConnectedScreen,RecognizedText ' +
   'FROM TextRecognize where ShotNumber = :prm';

 ADOQuery := TADOQuery.Create(DebugFilmConnection);
 ADOQuery.Connection := DebugFilmConnection;

 ADOQuery.Active := false;
 //ADOQuery.SQL.Text := 'SELECT * FROM Templates where ShotNumber = :prm';
 ADOQuery.SQL.Text := SQLText;
 ADOQuery.Parameters.ParseSQL(ADOQuery.SQL.Text, true);
 ADOQuery.Parameters.ParamByName('prm').Value := number;
 ADOQuery.Active := true;
 ADOQuery.ExecSQL;


Вот что у меня родилось, но он ругается на Неправильно определен объект Parameter. Предоставлены несогласованные  или неполные сведения.

А если вместо ADOQuery.SQL.Text := SQLText; оставить закоментированную строку, то все работает...

что не так :-(


gedevan   (2016-01-08 15:22:00) [45]

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


gedevan   (2016-01-08 14:59:00) [46]

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо