INNER JOIN объединение 3 таблиц
, MS Access/ADO
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.66] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
INNER JOIN объединение 3 таблиц
, MS Access/ADO
|
Сообщ.
#1
,
|
|
|
|
Написал запрос, объединяющий 3 таблицы INNER JOIN'ом
![]() ![]() ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo'); ADOQuery1.SQL.Add('from BolList as BL '); ADOQuery1.SQL.Add('INNER JOIN Doctor as D ON BL.doctor=D.key '); ADOQuery1.SQL.Add('INNER JOIN MKB ON BL.mkb=mkb.code '); ADOQuery1.SQL.Add('where PolStac="'+PolStac+'"'); ADOQuery1.SQL.Add('and Date>=:d1 and Date<=:d2'); ADOQuery1.Parameters.ParamByName ('d1').Value:=DateEdit1.Date; ADOQuery1.Parameters.ParamByName ('d2').Value:=DateEdit2.Date; ADOQuery1.SQL.Add('GROUP BY BL.mkb,D.fio,MKB.DESCR'); ADOQuery1.Active:=true; выдает ошибку: Ошибка синтаксиса(пропущен оператор) в выражении запроса BL.doctor=D.key INNER JOIN MKB ON BL.mkb=mkb.code Делаю подобный запрос в SQL-server все работает... Может Access не дает объединять больше 2х таблиц? Нагуглил похожую проблему http://www.cyberforum.ru/delphi-database/thread13773.html но ее решения там нету... Добавлено Если сделать все cross join'ом, всмысле через запятую таблицы написать, то все работает ![]() ![]() ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo'); ADOQuery1.SQL.Add('from BolList as BL,Doctor as D,MKB'); ADOQuery1.SQL.Add('where BL.doctor=D.key and BL.mkb=mkb.code and BL.mkb=mkb.code'); ADOQuery1.SQL.Add('and PolStac="'+PolStac+'"'); ADOQuery1.SQL.Add('and Date>=:d1 and Date<=:d2'); ADOQuery1.Parameters.ParamByName ('d1').Value:=DateEdit1.Date; ADOQuery1.Parameters.ParamByName ('d2').Value:=DateEdit2.Date; ADOQuery1.SQL.Add('GROUP BY BL.mkb,D.fio,MKB.DESCR'); ADOQuery1.Active:=true; Но вопрос про INNER JOIN не снимается, почему в данном случае не работает он? |
|
Сообщ.
#2
,
|
|
|
|
![]() ![]() ADOQuery1.SQL.BeginUpdate; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo'); ... ADOQuery1.SQL.Add('GROUP BY BL.mkb,D.fio,MKB.DESCR'); ADOQuery1.SQL.EndUpdate; ... |
|
Сообщ.
#3
,
|
|
|
|
Почему бы не использовать неплохой конструктор запросов самого Аксесса, чтобы посмотреть как на самом деле текст запроса должен выглядеть.
Рекомендуется именно его, т.к. Аксесс формирует селективные запросы, объединяющие данные из нескольких таблиц (кстати, и из 2, 3, 5, 10, и т.д. таблиц) с окаянным количеством вложенных круглых скобок, переплетение которых без пол-литры не разобрать. После успешного выполнения сконструированного запроса перенести текст этого запроса в приложение. Будет работать за милую душу. Проверено сотни раз. |
|
Сообщ.
#4
,
|
|
|
|
2 sansans, спасибо помогло. Оказывается в синтаксисе Access INNER JOIN берется в скобки
![]() ![]() SELECT * FROM (BolList INNER JOIN doctor ON BolList.Doctor = doctor.key) INNER JOIN mkb ON BolList.mkb = mkb.CODE; |
|
Сообщ.
#5
,
|
|
|
|
Хоть трабл был и не в этом, но кто ж добавляет кусок запроса после присваивания параметров
|