powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сделать умную выборку из двух связанных таблиц
16 сообщений из 16, страница 1 из 1
Сделать умную выборку из двух связанных таблиц
    #39313343
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 связанные таблицы: банкоматы и контракты. Связаны по полю серийный_номер банкомата.
Когда банкомат перевозится со старого места установки на новое, старый контракт закрывается, а новый открывается.
У банкомата в таблице банкоматы может быть флаг что банкомат находится на гарантии.

Нужно отобразить все банкоматы на гарантии и отобразить их последнее место установки с адресом

Вот пример:

таблица1 Банкоматы:
серийный номер - текстовый уникальный индекс
на_гарантии - логическое значение

таблица2 Контракты:
системный_номер - индекс, уникальное увеличивающееся число
адрес_установки - текстовый
банкомат_демонтирован - логическое значение
серийный номер - связь с таблицей1

Например я делаю запрос чтобы поле на_гарантии было ИСТИНА, но в результат попадают все места установки из таблицы контракты
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313356
Если у всех контрактов по банкомату кроме последнего в "банкомат_демонтирован" флажок установлен, то добавьте условие False по этому полю.
Если нет, то нужна дата контракта, которой в вашей таблице нет.
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313368
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если системный номер контракта при перемещении всегда увеличивается, то создайте сначала запрос, возвращающий максимальный системный номер для каждого серийного номера, а затем в другом запросе свяжите контракты с этим запросом по системному номеру и серийному номеру, а также добавьте таблицу с банкоматами, отобрав те, которые на гарантии.
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313373
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dave_ScreamНужно отобразить все банкоматы на гарантии и отобразить их последнее место установки с адресом
Добавте в таблица_2 поле "Дата установки"
Максимальная дата и будет последним местом установки.
С уважением.
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313469
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

Ваш вариант то что нужно! Но подскажите как сделать запрос, который бы возвратил для банкомата контракт с максимальным (последним) системным номером?
И как в access потом сделать выборку из выборки? Делать два запросы или можно одним как-то по хитрому обойтись,
Спасибо!
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313503
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dave_Scream,

Простейший запрос с группировкой, проще нарисовать в конструкторе:
Код: sql
1.
2.
3.
SELECT [серийный_номер], Max([системный_номер]) 
FROM Контракты
GROUP BY [серийный_номер]



Можно и одним запросом, но придется использовать подзапрос, а конструктор их не очень хорошо поддерживает, придется редактировать текст руками. Поэтому проще сначала сохранить запрос с группировкой, а затем использовать его как обычную таблицу в конструкторе.
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313507
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

А чисто для образовательных целей можете скинуть SQL запрос или пример?

Я сейчас возился пытаясь описать блок Where, но это просто возвращает самый последний id контракта:

SELECT Контракты.id, Устройства.serial_number, Контракты.[Полный адрес]
FROM Устройства INNER JOIN Контракты ON Устройства.serial_number = Контракты.serial_number
WHERE (Контракты.id = Select max("id") from Контракты)
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313520
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

Получилось в 2 запроса:
Сначала создал запрос "серийный номер" - "максимальный ID" и через этот запрос связал между собой таблицы Устройства и Контракты - всё получилось, спасибо)

Жаль мало чего понял :(
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313653
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость


Вот такая таблица получилась, но проблема - её нельзя редактировать,т.к. result set не является обновляемым - возможно ли его сделать обновляемым?
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313678
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как запрос с групповой операцией сделать обновляемым/редактируемым?
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313681
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dave_Scream,
никак
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313834
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dave_Scream,

В запросе нужно еще связать поля serial_number между MaxID и Контракты, а Устройства лучше связывать также с Контрактами. В принципе в данном случае разницы нет, но при других видах запросов это может повлиять на результаты.

Если в запросе или любой его части - запрос, подзапрос - есть группировка, то запрос будет нередактируемым, увы, это ограничение Акцесса, в других базах данных также есть некие ограничения на групповые операции, но не такие жесткие. В вашем случае запрос можно сделать редактируемым, если заменить подзапрос на функцию DMax в основном запросе, поищите на форуме, тут много таких примеров
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39313989
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

Вот рабочий запрос:
Код: sql
1.
2.
SELECT Контракты.[Полный адрес], Устройства.инв_номер
FROM (Устройства INNER JOIN MaxID ON Устройства.serial_number = MaxID.serial_number) INNER JOIN Контракты ON MaxID.[Max-id] = Контракты.id;


Подскажите как правильно заменить обращение к промежуточному запросу MaxID на функцию
Код: sql
1.
DMax('id','Контракты',Устройства.serial_number = Контракты.serial_number)
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39314039
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT Контракты.id, Контракты.serial_number, Контракты.Адрес, Устройства.гарантия
FROM Контракты INNER JOIN Устройства ON Контракты.serial_number = Устройства.serial_number
WHERE Контракты.id=DMax("id","[Контракты]","serial_number='" & [Устройства].[serial_number] & "'") AND Устройства.гарантия=True;
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39314066
Dave_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость


Спасибо) Я так пробовал, только не додумался как правильно оформить третий параметр DMax - там нужны кавычки "'" "'' как в выражениях.
...
Рейтинг: 0 / 0
Сделать умную выборку из двух связанных таблиц
    #39314101
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кавычки это беда...
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сделать умную выборку из двух связанных таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]