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

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

Не поддерживается выбранное объединение (MS Access, D7, ADO)


И. Павел ©   (2010-08-05 10:18:00) 

Я работаю с MS Access через ADO, Jet. Пишу такой запрос:

'SELECT j.schet, n.summa - sum(o.summa)' +
'FROM (nachisl AS n ' +
'LEFT JOIN jilci AS j ON j.id = n.IDJilci) ' +
'LEFT JOIN oplati AS o ON o.IDJilci = j.id ' + ' AND o.god = ' + IntToStr(MainForm.RaschGod) + ' AND o.mes = ' + IntToStr(MainForm.RaschMes) + ' ' 'WHERE n.god = ' + IntToStr(MainForm.RaschGod) + ' AND n.mes = ' + IntToStr(MainForm.RaschMes) + ' ' +
'GROUP BY j.schet, n.summa;


Вылетает ошибка: "Не поддерживается выбранное объединение".
Если удалить один из Join, то ошибок не возникает. Но вроде бы некоторые запросы с несколькими Join у меня Access пропускает, т.е. он их выполнять может.
Подскажите, пожалуйста, как исправить запрос, чтобы не возникала эта ошибка?
Можно, конечно, сделать цикл с подзапросами, но, наверное, можно все сразу выбрать.

Заранее спасибо.


Sergey13   (2010-08-05 12:12:00) [1]

> [0] И. Павел ©   (05.08.10 10:18)

Если использовать параметры, то и самому будет проще разбираться в подобных дебрях.


Anatoly Podgoretsky   (2010-08-05 12:03:00) [2]

SQL в Акцесс немного странный.


И. Павел   (2010-08-05 11:59:00) [3]

> 12 ©

Спасибо.


> Anatoly Podgoretsky ©

Спасибо. Через редактор сделал по шагам - оказалось, что ругается на условия после ON во втором JOIN-е. Заключил их в скобки - ACCESS перестал ругаться:

'SELECT j.schet, n.summa - sum(o.summa)' +
'FROM (nachisl AS n ' +
'LEFT JOIN jilci AS j ON j.id = n.IDJilci) ' +
'LEFT JOIN oplati AS o ON (o.IDJilci = j.id ' + ' AND o.god = ' + IntToStr(MainForm.RaschGod) + ' AND o.mes = ' + IntToStr(MainForm.RaschMes) + ' )' +
'WHERE n.god = ' + IntToStr(MainForm.RaschGod) + ' AND n.mes = ' + IntToStr(MainForm.RaschMes) + ' ' +
'GROUP BY j.schet, n.summa;'


Anatoly Podgoretsky   (2010-08-05 11:05:00) [4]


> Вот так заработало!

Такой запрос хоть и работает, но идеологически неверен. Надо переписать с использование JOIN


Anatoly Podgoretsky   (2010-08-05 11:02:00) [5]

> И. Павел  (05.08.2010 10:18:00)  [0]

Если у тебя есть Акцесс то построй запрос в его генераторе запросов, если
нет то в справку, там написано как правильно писать соединения, успех в
правильной установке скобок.


12   (2010-08-05 10:58:00) [6]

там со скобками морока, что-то их много надо ставить
в A сразу надо писать в where все join

если только цель не сточить линии кожи на пальцах для не опознавания в дальнейшем в МВД %)


И. Павел   (2010-08-05 10:28:00) [7]

Вот так заработало!
'SELECT  j.schet, n.summa - sum(o.summa) ' +
'FROM nachisl AS n, jilci AS j, oplati AS o ' +
'WHERE j.id = n.IDJilci AND o.IDJilci = j.id  AND o.god = ' + IntToStr(MainForm.RaschGod) + ' AND o.mes = ' + IntToStr(MainForm.RaschMes) + ' ' +
'AND n.god = ' + IntToStr(MainForm.RaschGod) + ' AND n.mes = ' + IntToStr(MainForm.RaschMes) + ' ' +
'GROUP BY j.schet, n.summa;'


Но все-таки было бы интересно знать, почему Access ругается на первый запрос.


И. Павел   (2010-08-05 10:21:00) [8]

Вот такой текст запроса формируется:
 SELECT  j.schet, n.summa - sum(o.summa)
 FROM (nachisl AS n
 LEFT JOIN jilci AS j ON j.id = n.IDJilci)
 LEFT JOIN oplati AS o ON o.IDJilci = j.id AND o.god = 2010 AND o.mes = 8
 WHERE n.god = 2010 AND n.mes = 8
 GROUP BY j.schet, n.summa;


Наверх

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