![]() |
Запрос на выборку данных из нескольких таблиц
Есть база данных. В ней имеются таблицы:
Clients - клиенты ClientInAgreements - таблица "Заявки клиентов", связывающая Clients и Agreements. Agreements - заявки Один клиент может оформлять несколько заявок. С другой стороны, к одной заявке может быть привязано несколько клиентов, отсюда и такая структура. Поля Clients: CL_ID - уникальный ID клиента CL_FIO CL_email Поля ClientInAgreements: CA_ID - уникальный ID записи в таблице CA_CL_ID - уникальный ID клиента (связь с таблицей Clients) CA_AG_ID - уникальный ID заявки (связь с таблицей Agreements) Поля Agreements: AG_ID - уникальный ID заявки AG_Date - дата заявки (тип DateTime) AG_code - буквенно-цифровой код заявки Задача такая: получить таблицу заявок, оформленных на определенную дату (например, 20.01.2012), с такими полями Уникальный ID заявки Буквенно-цифровой код заявки Уникальный ID клиента ФИО клиента email клиента Хочется сделать все это с помощью одного SQL-запроса. Уникальные ID представлены целыми числами. Упростить и переделать базу данных не предлагать, т.к. такой возможности нет. |
Цитата:
Наподобие: Код:
SELECT Agreements.AG_ID, Agreements.AG_code, Clients.CL_ID, Clients.CL_FIO, Clients.CL_email FROM Clients INNER JOIN (Agreements INNER JOIN ClientInAgreemetns ON Agreements.AG_ID = ClientInAgreemetns.CA_AG_ID) ON Clients.CL_ID = ClientInAgreemetns.CA_CL_ID; |
Iska, спасибо. Вроде работает. Только не понял, зачем точка с запятой в конце. Привет Паскалю?
|
old_nick, у меня не было в тот момент под рукой доступа к SQL серверу, потому я воспользовался Microsoft Access. Точка с запятой — оттуда.
|
Iska, если не затруднит, подскажете, как выцепить еще и данные из таблиц Coutries и Cities?
Поля Countries: CN_ID CN_Name Поля Cities: CT_ID CT_Name С этими таблицами связана таблица Agreements: поля AG_CN_ID и AG_CT_ID соответственно. В результирующей таблице надо отобразить CN_Name и CT_Name Заранее спасибо. |
Примерно так:
Код:
SELECT Agreements.AG_ID, Agreements.AG_code, Clients.CL_ID, Clients.CL_FIO, Clients.CL_email, Countries.CN_Name, Cities.CT_Name FROM Countries INNER JOIN (Cities INNER JOIN (Clients INNER JOIN (Agreements INNER JOIN ClientInAgreemetns ON Agreements.AG_ID = ClientInAgreemetns.CA_AG_ID) ON Clients.CL_ID = ClientInAgreemetns.CA_CL_ID) ON Cities.CT_ID = Agreements.AG_CT_ID) ON Countries.CN_ID = Agreements.AG_CN_ID |
Iska, спасибо, работает.
|
Iska, возникла еще потребность добавить в результирующий набор поле строкового типа, которое:
1) будет иметь возможность редактирования; 2) будет являться "временным", т.е. его добавление в набор и изменения в нем не будут никак сказываться на исходной БД. Пробовал сделать, как тут и тут, но в результате нет возможности редактировать. |
Какова цель добавления такого поля?
|
Суть в том, что формируется таблица клиентов, которым потом будут рассылаться оповещения на почту. Пользователь должен иметь возможность исключить любую запись из списка рассылки, пометив ее в таблице. При этом на исходной БД это никак не должно отражаться.
|
old_nick, ну, создавайте временную таблицу и связывайте её с существующей по ключевым полям 1:1.
|
Iska, спасибо, я уже нашел способ решить последнюю задачу с помощью среды программирования.
Еще раз большое спасибо за помощь! |
old_nick, как решили?
|
С помощью цветового выделения в таблице. Пользователь выбирает запись в таблице и кликает по кнопке "Поменить/снять пометку" - запись помечается цветом. Потом в зависимости от цвета запись либо обрабатывается программой, либо нет.
|
old_nick, ну, а цвет где хранится?
|
Iska, цвет хранится в динамическом массиве с размерностью, соответствующей количеству записей в SQL-выборке.
|
Время: 21:11. |
Время: 21:11.
© OSzone.net 2001-