powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выборка значений из двух таблиц
13 сообщений из 13, страница 1 из 1
Выборка значений из двух таблиц
    #39327412
bravo82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Прошу помочь с составлением запроса для выборки подсчитанных строк. Таблицы devices, details, dev_history.

Необходимо произвести выборку количества строк из details в один столбец и из dev_history в другой столбец.

Зависимости:

(один) devices.dev_id ------> (ко многим) details.dev_id

(один) details.id ------> (ко многим) dev_history.d_id

С помощью конструктора получается запрос такого вида:

Код: sql
1.
2.
3.
4.
SELECT devices.devicetype, Count(details.id) AS [Count-id], Count(dev_history.h_id) AS [Count-h_id], devices.dev_id
FROM (devices INNER JOIN details ON devices.dev_id = details.devtype_id) INNER JOIN dev_history ON details.id = dev_history.d_id
GROUP BY devices.devicetype, devices.dev_id
HAVING (((devices.dev_id)=60));



Получаю результат:

devicetype Count-id Count-h_id device1 50 50device2 20 20device3 40 40

Т.е. все значения в обоих столбцах получаются одинаковыми и совсем неверными.

Заранее благодарен!
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39327451
Махмут
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bravo82 привет
выложи маленький mdb-файл (формат 2003) с небольшим количеством строк и только с этими таблицами
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39327991
Вам нужно вместо таблицы dev_history использовать запрос (сохраненный или вложенный) с группировкой по d_id и Count(dev_history.h_id) AS [Count-h_id]. В основном запросе написать FIRST([Count-h_id]) As [Count-h_id].
Кроме того:
1. Вероятно в таблице dev_history может не быть записей для какого-то details.id, поэтому вместо INNER JOIN лучше применить LEFT JOIN;
2. В вашем запросе логичнее (работает быстрее) вместо HAVING лучше применить WHERE (условие должно быть перед GROUP BY).
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39330160
bravo82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выкладываю файл в 2007. В 2003 перевожу, что-то ругается.
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39332199
bravo82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо проблема серьезная. Может есть какие варианты?
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39332211
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bravo82В 2003 перевожу, что-то ругается.Потому что чистить базу надо от ненужного хлама перед выкладыванием. Там небось формы/отчёты/прочее, для вопроса нафиг ненужное, как лежало, так и лежит...
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39332218
bravo82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
) Да нет там ничего, 3 таблицы и запрос один. Так проблема все-таки в версии?
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39332219
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bravo82нет там ничего, 3 таблицы и запрос один.Тогда игнорируй "ругань".
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39338291
bravo82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Файл в формате Access 2003 - dbaccess.mdb
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39338317
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bravo82Таблицы devices, details, dev_history.
Таблица details не найдена.
Найдена таблица points.
Если представить, что points - это на самом деле details, то
Код: sql
1.
2.
3.
4.
5.
SELECT devices.devicetype, Count(points.id) AS points_count, q1.[Count-h_id] AS dev_history_count
FROM (devices INNER JOIN points ON devices.dev_id = points.dev_id) INNER JOIN (SELECT devices.dev_id, Count(dev_history.h_id) AS [Count-h_id]
FROM (devices INNER JOIN points ON devices.dev_id = points.dev_id) INNER JOIN dev_history ON points.id = dev_history.d_id
GROUP BY devices.dev_id) as q1 ON devices.dev_id = q1.dev_id
GROUP BY devices.devicetype, q1.[Count-h_id];
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39341125
bravo82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Просто супер!!! Большое спасибо.
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39341914
bravo82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Добавил в таблицу dev_history поле r_date (сразу не подумал почему-то), теперь не получается правильный запрос с условием заданного периода between .

SELECT devices.devicetype, Count(points.id) AS points_count, q1.[Count-h_id] AS dev_history_count
FROM (devices INNER JOIN (SELECT devices.dev_id, Count(dev_history.h_id) AS [Count-h_id] FROM (devices INNER JOIN points ON devices.dev_id=points.dev_id) INNER JOIN dev_history ON points.id=dev_history.d_id WHERE q1.[r_date] between #01/01/2015# and #12/31/2015#
GROUP BY devices.dev_id) AS q1 ON devices.dev_id = q1.dev_id) INNER JOIN points ON devices.dev_id = points.dev_id
GROUP BY devices.devicetype, q1.[Count-h_id];

Но ничего не меняется...

Прошу помочь добить задачу. Заранее благодарен Вам.
...
Рейтинг: 0 / 0
Выборка значений из двух таблиц
    #39341944
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну надо же думать, чего кодишь... это ж надо догадаться - использовать условие отбора по значению поля из подзапроса В ЭТОМ ПОДЗАПРОСЕ!!!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выборка значений из двух таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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