![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать sql запрос к нескольким таблицам (ADO,MS Access)?
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, это не то что мне нужно. В таблицах нет данных которые в результирующей выборке должны оказаться в одной строке. В итоговой выборке количество строк должно быть равно сумме количеств строк в объединяемых таблицах.