Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 4 сообщений из 4, страница 1 из 1
09.10.2015, 14:10:35
    #39072948
*Ann*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Добрый день!
Есть таблицы:
Логины,
Очереди (связана с Логинами, у одного логина может быть несколько очередей),
Роли (связана с Логинами, у одного логина может быть несколько ролей),
Территории (связана с таблицей Роли, роль может принадлежать нескольким территориям).
С логином может быть связано произвольное количество очередей и территорий.
Необходимо вывести список пользователей, которые не связаны ни с одной действующей территорией (территория указана в таблице Роли), но для которых назначена одна очередь с именем Queue1.
В общем нужно выбрать логины, количество которых в таблице Роли = 0 и количество которых в таблице Очереди = 1 и имя очереди имеет имя Queue1/
Подскажите, пожалуйста, как это сделать?
...
Рейтинг: 0 / 0
09.10.2015, 15:17:22
    #39073024
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Свяжите таблицы. Получите список уникальных наборов (Логин-Очередь-Роль-Территория).
Сгруппируйте по логину, посчитайте COUNT(Территория.Действующая=False) и COUNT(Очередь.Имя='Queue1'), и оставьте (HAVING) только те, у которых указанные значения равны 0 и 1 соответственно.
...
Рейтинг: 0 / 0
11.10.2015, 08:16:03
    #39073772
*Ann*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Спасибо. А Вы не могли бы это примерно в предложениях SQL написать, чтобы понятнее мне было.
...
Рейтинг: 0 / 0
11.10.2015, 22:06:53
    #39074046
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
*Ann*,

структура базы

Код: sql
1.
2.
3.
4.
create table listLogin (loginId int);
create table listQueue (queueId int, queueTit text, loginId int);
create table listRole (roleId int, loginId int);
create table listLand (landId int, roleId int);



решение для задачи, когда у логина нет роли, но есть очередь

Код: sql
1.
2.
3.
4.
5.
6.
select * from listLogin a
    left join listRole b on a.loginId = b.loginId
        && b.loginId is null
    join listQueue c on a.loginId = c.loginId
        && c.queueTit = 'Queue1'
;



решение для задачи, когда у логина нет территории, но есть очередь

Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from listLogin a
    join listRole b on a.loginId = b.loginId
    left join listLand d on b.roleId = d.roleId
        && d.roleId is null
    join listQueue c on a.loginId = c.loginId
        && c.queueTit = 'Queue1'
;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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