Показать полную графическую версию : Запрос на выборку данных из нескольких таблиц
old_nick
01-11-2012, 13:59
Есть база данных. В ней имеются таблицы:
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;
old_nick
02-11-2012, 17:28
Iska, спасибо. Вроде работает. Только не понял, зачем точка с запятой в конце. Привет Паскалю?
old_nick, у меня не было в тот момент под рукой доступа к SQL серверу, потому я воспользовался Microsoft Access. Точка с запятой — оттуда.
old_nick
04-11-2012, 03:03
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
old_nick
05-11-2012, 20:45
Iska, спасибо, работает.
old_nick
13-11-2012, 02:47
Iska, возникла еще потребность добавить в результирующий набор поле строкового типа, которое:
1) будет иметь возможность редактирования;
2) будет являться "временным", т.е. его добавление в набор и изменения в нем не будут никак сказываться на исходной БД.
Пробовал сделать, как тут (http://www.sqlmag.com/forums/aft/79146) и тут (http://stackoverflow.com/questions/5185743/how-can-i-create-a-blank-hardcoded-column-in-a-sql-query), но в результате нет возможности редактировать.
Какова цель добавления такого поля?
old_nick
13-11-2012, 11:27
Суть в том, что формируется таблица клиентов, которым потом будут рассылаться оповещения на почту. Пользователь должен иметь возможность исключить любую запись из списка рассылки, пометив ее в таблице. При этом на исходной БД это никак не должно отражаться.
old_nick, ну, создавайте временную таблицу и связывайте её с существующей по ключевым полям 1:1.
old_nick
15-11-2012, 16:36
Iska, спасибо, я уже нашел способ решить последнюю задачу с помощью среды программирования.
Еще раз большое спасибо за помощь!
old_nick
16-11-2012, 17:54
С помощью цветового выделения в таблице. Пользователь выбирает запись в таблице и кликает по кнопке "Поменить/снять пометку" - запись помечается цветом. Потом в зависимости от цвета запись либо обрабатывается программой, либо нет.
old_nick, ну, а цвет где хранится?
old_nick
19-11-2012, 16:29
Iska, цвет хранится в динамическом массиве с размерностью, соответствующей количеству записей в SQL-выборке.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC