В начало

Двойное левое соединение

 

            Задача: нужно создать SQL-запрос с двойным левым соединением в среде разработки «Дельфи 7» для таблицы «Поставки»,  входящую в базу данных «Оптовая база.mdb». Сама БД «Оптовая база» создана в СУБД «MS Access 2002».

            Загружаем «Дельфи 7», создаем новое приложение, перетаскиваем на главную форму приложения компоненты для подключения к базе данных «Оптовая база».  Для подключения к БД, написанной на «Access» подойдут компоненты с закладки «ADO»: ADOConnection, ADOQuery, DataSource, DBGrid.

Компонент

Свойство, значение

ADOConnection1

ConnectionString = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ACCESS\Оптовая база.mdb;Persist Security Info=False»

LoginPrompt = False

ADOQuery

Connection = ADOConnection1

SQL = …

 

            В свойство «SQL» компонента «ADOQuery1» нужно поместить запрос. В простейшем случае это будет:

SELECT *

FROM Поставки

            В этом случае мы получим следующий результат:

Рис. 1. Запрос к таблице «Поставки»

 

            Как видно из рисунка 1, товар и поставщик представляют собой ссылки. Для получения полной информации по поставкам необходимо присоединить в запросе таблицы: Товары, Поставщики. Ниже показана схема данных, если что.

Рис. 2. Схема данных БД «Оптовая база»

Рис. 2. Схема данных БД «Оптовая база»

            Пишем запрос.

SELECT П.Дата, Т.Название, П.Количество, П2.Организация

FROM (Поставки AS П

LEFT JOIN Товары  AS Т ON П.Товар=Т.Код_Товара)

LEFT JOIN Поставщики  AS П2  ON П.Поставщик=П2.Код_Поставщика

Скобки выделенные желтым цветом важны, без них будет вылетать ошибка про пропущенный оператор, что в принципе немного странно, т.к. в других СУБД запрос нормально работает, но видимо диалект SQL такой.

Рис. 3. Ошибка синтаксиса (пропущен оператор)

Рис. 3. Ошибка синтаксиса (пропущен оператор)

 

            Окончательно получаем следующий результат:

Рис. 4. Результат двойного левого соединения