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

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

Вложенные SQL запросы в СУБД Access


Kostafey ©   (2007-05-04 01:52:00) 

В прошлый раз имел дело с MS SQL Sever, теперь Access.
Ужесть... Но вопрос не в этом.

Скажите, пожалуйста, можно ли в Access реализовать что-то подобное


SELECT * FROM (
 SELECT..
 FROM ...
 WHERE ...
) a

и так далее, т.е. реализовать вложенный(е) запрос(ы) ?

Есть ли вообще литература по SQL в Access
и что-нибудь по контролю и восстановлению ссылочной целостности БД в Access ?


Kostafey   (2007-05-04 12:30:00) [1]

Вся ошибка заключается в ;которой заканчивается запрос.
Access ее зачем - то сам добавляет.


Kostafey   (2007-05-04 12:24:00) [2]

Уважаемые мастера ЮЮ, sniknik !

Прошу прощения ! Поторопился вчера сюда постить.
Все дело вот в чем.

Тестировал запрос я в "запросе на выборку" Access.
Если вставить в него вот такой запрос (на этот раз цитирую):

SELECT
Dogovor.NomerDogovora as [Номер договора],
Dogovor.NomerActa as [Номер акта],
TipDogovora.Tip as [Тип договора],
Dogovor.DataDogovora as [Дата договора],
Subject.Tip as [Тип субъекта],
Subject.Familiya as [Фамилия],
Subject.Naimenovanie as [Наименование],
Location.Tip as [Тип страны]

FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id = Subject.S_id
 and Dogovor.D_TD_id = TipDogovora.TD_id
 and Subject.S_L_id = Location.L_id

Он успешно выполняется. Запрос сохраняю, закрываю.
Заново открываю. Вид запроса уже изменлся:

SELECT Dogovor.NomerDogovora AS [Номер договора], Dogovor.NomerActa AS [Номер акта], TipDogovora.Tip AS [Тип договора], Dogovor.DataDogovora AS [Дата договора], Subject.Tip AS [Тип субъекта], Subject.Familiya AS Фамилия, Subject.Naimenovanie AS Наименование, Location.Tip AS [Тип страны]
FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id=Subject.S_id And Dogovor.D_TD_id=TipDogovora.TD_id And Subject.S_L_id=Location.L_id;

Но он выполняется.
Дописываю:

select *
from (
SELECT Dogovor.NomerDogovora AS [Номер договора], Dogovor.NomerActa AS [Номер акта], TipDogovora.Tip AS [Тип договора], Dogovor.DataDogovora AS [Дата договора], Subject.Tip AS [Тип субъекта], Subject.Familiya AS Фамилия, Subject.Naimenovanie AS Наименование, Location.Tip AS [Тип страны]
FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id=Subject.S_id And Dogovor.D_TD_id=TipDogovora.TD_id And Subject.S_L_id=Location.L_id;
) a

Выдает: "Ошибка синтаксиса в предложении FROM"
Вот тут я и сбился с толку.

Однако если обратится к исходному варианту, т.е.

select *
from (
SELECT
Dogovor.NomerDogovora as [Номер договора],
Dogovor.NomerActa as [Номер акта],
TipDogovora.Tip as [Тип договора],
Dogovor.DataDogovora as [Дата договора],
Subject.Tip as [Тип субъекта],
Subject.Familiya as [Фамилия],
Subject.Naimenovanie as [Наименование],
Location.Tip as [Тип страны]

FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id = Subject.S_id
 and Dogovor.D_TD_id = TipDogovora.TD_id
 and Subject.S_L_id = Location.L_id
) a

То он прекрасно работает.

Сохраняю запрос. Закрываю. Заново открываю.
Он несколько видоизменяется, но продолжает работать:

SELECT *
FROM [SELECT
Dogovor.NomerDogovora as [Номер договора],
Dogovor.NomerActa as [Номер акта],
TipDogovora.Tip as [Тип договора],
Dogovor.DataDogovora as [Дата договора],
Subject.Tip as [Тип субъекта],
Subject.Familiya as [Фамилия],
Subject.Naimenovanie as [Наименование],
Location.Tip as [Тип страны]

FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id = Subject.S_id
 and Dogovor.D_TD_id = TipDogovora.TD_id
 and Subject.S_L_id = Location.L_id
]. AS a;


На самом деле все эти сохранения/перезапуски, открытия/закрытия мне все равно
не понадобятся, т.к. тексты запросов будут хранится во внешних файлах.

Спасибо и еще раз прошу прощения за невнимательность.


sniknik   (2007-05-04 10:54:00) [3]

> Так как в [0] не работает.
естественно, "..." синтаксисом не предусмотрено.  

> но я уже пошутил первым !
смысл не в том кто первый, смысл в том кому это надо...

вообще у вас что конкурс под лозунгом "кто меньше всего скажет, но тем не менее получит ответ"?

> Да и ошибку озвучит не мешало бы
зачем? просто переносим ветку в прочее и продолжаем отвлеченно трепаться. порадуется гораздо больше народу чем успешному решению "проблемы".


ЮЮ   (2007-05-04 10:06:00) [4]

в MS Access 2003 такое работет:

SELECT * FROM (
SELECT DISTINCT Договор.[На Должность]
FROM Договор
) a
ORDER BY 1;

так что всё дело в ... Да и ошибку озвучит не мешало бы


Kostafey   (2007-05-04 09:59:00) [5]

Ну на том спасибо, порадовали, а синтаксис как выглядеть будет ?
Так как в [0] не работает.

P.S. Шутка по поводу что такое "..." будет очень удачной, но я уже пошутил первым !


EvS   (2007-05-04 09:33:00) [6]


> можно ли в Access реализовать что-то подобное


Можно


Наверх

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