powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос
4 сообщений из 4, страница 1 из 1
Помогите написать запрос
    #39072948
*Ann*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Есть таблицы:
Логины,
Очереди (связана с Логинами, у одного логина может быть несколько очередей),
Роли (связана с Логинами, у одного логина может быть несколько ролей),
Территории (связана с таблицей Роли, роль может принадлежать нескольким территориям).
С логином может быть связано произвольное количество очередей и территорий.
Необходимо вывести список пользователей, которые не связаны ни с одной действующей территорией (территория указана в таблице Роли), но для которых назначена одна очередь с именем Queue1.
В общем нужно выбрать логины, количество которых в таблице Роли = 0 и количество которых в таблице Очереди = 1 и имя очереди имеет имя Queue1/
Подскажите, пожалуйста, как это сделать?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39073024
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свяжите таблицы. Получите список уникальных наборов (Логин-Очередь-Роль-Территория).
Сгруппируйте по логину, посчитайте COUNT(Территория.Действующая=False) и COUNT(Очередь.Имя='Queue1'), и оставьте (HAVING) только те, у которых указанные значения равны 0 и 1 соответственно.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39073772
*Ann*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. А Вы не могли бы это примерно в предложениях SQL написать, чтобы понятнее мне было.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #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
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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