powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите сделать запрос с двойной связью
6 сообщений из 6, страница 1 из 1
Помогите сделать запрос с двойной связью
    #32860249
Sens
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вкратце такая проблема:
Есть таблица пользователей

USER_ID
USER_NAME


Есть таблица событий:
Event_ID
Event_DATE (дата события)
Assaulter_ID (ID пользователя который атакует)
A_Type (тип атаки: атака или убийство )
Target_ID (ID пользователя который атакован)

Из этих двух таблиц я хочу получить одним запросом данные (создать новую таблицу) следующего рода:

USER_NAME (Имя пользователя)
Assault_COUNT (Количество атак этим пользователем)
TARGET_COUNT (Количество смертей/атакуемый этого пользователя)
USER_RATING (Расчетная формула рейтинга игрока в зависимости от значений Assault_COUNT и TARGET_COUNT).

Вот и мучаюсь, не знаю как такой запрос собрать. SQL ругается, говорит что не может быть одновременно связи из таблицы к двум записям в одном запросе.
А у меня USER.USER_ID Одновременно связан с Event.Assaulter_ID и Event.Target_ID.

Помогите пожалуйста, или объясните почему этого нельзя сделать.

Нужно это сделать именно одним запросом.
...
Рейтинг: 0 / 0
Помогите сделать запрос с двойной связью
    #32860264
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо связать два экземпляра таблицы USER в одном запросе. Но с разными псевдонимами.

Конструктор запроса. Добавить таблицу событий. Добавить первую таблицу пользователей. Щелкннуть по ней правой кнопкой мыши, задать имя псевдонима Assaulter. Связать с полем Assaulter_ID. Добавить еще раз таблицу пользователей и назвать ее как Target. Связать с Target_ID.

Вызвать групповые операции. Сгруппировать и просуммировать.
...
Рейтинг: 0 / 0
Помогите сделать запрос с двойной связью
    #32860439
Sens
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так результат выборки (значения) получаются те которые нужны,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT 
  'Nick Stouk УБИЛ' AS Action, 
  Count(ASS.USER_NAME) AS [Count-USER_NAME]   
FROM 
USERS AS TARG INNER JOIN (USERS AS ASS INNER JOIN Events ON ASS.USER_ID = Events.assaulter_ID) ON TARG.USER_ID = Events.target_ID

HAVING (((ASS.USER_NAME)='Nick Stouk'))

UNION

SELECT   
  'Nick Stouk УМЕР' AS Action,
  Count(TARG.USER_NAME) AS [Count-USER_NAME]  
FROM 
  USERS AS TARG INNER JOIN (USERS AS ASS INNER JOIN Events ON ASS.USER_ID  = Events.assaulter_ID) ON TARG.USER_ID = Events.target_ID

HAVING (((TARG.USER_NAME)='Nick Stouk'))

Результат выборки:
УБИЛ  1700 
УМЕР  805 



но мне нужно чтобы этот результат был не в двух строках а в одной.
ИГРОК 1700 805

Это возможно?
...
Рейтинг: 0 / 0
Помогите сделать запрос с двойной связью
    #32860743
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данным выше советом не хотите воспользоваться по каким-то стойким соображениям ?
...
Рейтинг: 0 / 0
Помогите сделать запрос с двойной связью
    #32860944
Birjan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select user_id, user_name,
(select count(1) from [Таблица_событий]
where assaulter_id = t1.user_id) as assault_count,
(select count(1) from [Таблица_событий]
where target_id = t1.user_id) as target_count
from TablUsers t1
...
Рейтинг: 0 / 0
Помогите сделать запрос с двойной связью
    #32861541
Sens
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Birjan, спасибо, все работает! Не думал, что все так просто... надо разобраться с тем, как Вы это сделали :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите сделать запрос с двойной связью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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