Помогите с запросом

MishinOleg

Guest
Помогите с запросом

Полдня мучаюсь, не могу построить нормальный запрос.

Есть три таблицы:
Менеджеры{id,name}
Клиенты{id,name}
Таблица связи К-М {id_record,id_manager,id_client}

Один менеджер может быть занят разными клиентами, одним клиентом могут заниматься разные менеджеры.

Задача: Найти id всех Менеджеров, связаных с клиентами по имени "А", "В" и "С" в одном запросе.

Надо одним запросом. Раньше такие запросы не писал - не могу понять как сделать.

-~{}~ 17.01.06 12:44:

сорри, поправочка - найти менеджеров, которые обслуживают всех трех клиентов А, B и C одновременно

-~{}~ 17.01.06 12:49:

Пробовал так, но не выходит...
SELECT manager.id from manager,link where manager.id=link.id_manage and
exists (select client.id from client where client.name="A" and client.id=link.id) and
exists (select client.id from client where client.name="B" and client.id=link.id) and
exists (select client.id from client where client.name="C" and client.id=link.id)

-~{}~ 17.01.06 12:50:

точнее...

SELECT manager.id from manager,link where manager.id=link.id_manager and
exists (select client.id from client where client.name="A" and client.id=link.id_client) and
exists (select client.id from client where client.name="B" and client.id=link.id_client) and
exists (select client.id from client where client.name="C" and client.id=link.id_client)
 

.des.

Поставил пиво кому надо ;-)
Код:
SELECT M.* 
FROM manager M 
     INNER JOIN c_m CM ON M.manager_id=CM.manager_id
     INNER JOIN client C ON CM.client_id=C.client_id
WHERE C.name IN ('A','B','C');
GROUP BY M.manager_id
Хм.. всех трех одновременно?

Тогда добавить
HAVING COUNT(*)=3
 

MishinOleg

Guest
не трех - произвольного числа, то есть есть имена клиентов, и надо найти менеджеров, которые с ними работают одновременно. (это образное описание необходимой процедуры)

-~{}~ 17.01.06 13:40:

но произвольное число - не проблема, главное чтобы 2 и более одновременно выбирались. Пробую твой вариант...

-~{}~ 17.01.06 13:48:

WHERE C.name IN ('A','B','C');
мне надо менеджеров, не просто работающих с одним из трех клиентов, а работающих одновременно, то есть каждый М работает и с "А" и с "B" и с "C"
 

.des.

Поставил пиво кому надо ;-)
MishinOleg читайте ответы до конца.
Если надо одновременно добавьте HAVING COUNT(*)=N, где N количество клиентов с которыми менеджеры работают одновременно.
 

MishinOleg

Guest
Сначала робовал - показалось что не работает.
да, теперь все работает, спасибо. Меня сначало смутило большое количество отобранной информации, да я такие параметры сам указал.

Я пишу замену плохо работающему инструменту, так вот старый отбирает 19 наименований, а мой новый 689, вот я и подумал что несовпадение, а когда стал проверять - новый правильно отбирает с твоим запросом.

Спасибо.
 
Сверху