Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Не могу составить запрос (omickron) 02/05/2009 - 11:52:39
      Re: Не могу составить запрос (Алекс) 06/05/2009 - 05:05:09
      Re: Не могу составить запрос (omickron) 22/05/2009 - 18:12:13
      Re: Не могу составить запрос (Diter) 25/05/2009 - 07:41:56

> Original message text:
> From: omickron - 02/05/2009 - 11:52:39
> Subject:Не могу составить запрос
> -----------------
> Запрос вроде не сложный.
> Имееются три таблицы: Сотрудники(id1), Отделы(id2), Связь(id1,id2).
> Связь между Сотрудниками и Отделами многие-ко-многим через таблицу Связь. То есть каждый сотрудник может быть в нескольких отделах, и в одном отделе может быть много сотрудников.
> Вопрос вот в чём:
> имеется набор id1 сотрудников, например (51, 53, 55) и отдельный id1 другого сотрудника, например, 57.
> Так вот, мне необходимо выяснить, принадлежат ли все эти четыре id1 одному отделу?
>
> Другими словами, есть ли в таблице Связь на каждый из этих четырёх id1 id2, который для всех id1 одинаковый?
>
> Запрос SELECT COUNT(id2) FROM Связь WHERE id1 in (51,53,55,57) возвращает количество отделов для всех четырёх сотрудников. Но может быть такое, что первые два сотрудника принадлежат отделу1, третий - отделу1 и отделу2, а четвёрный - только отделу2. А мне это как раз и нужно отловить.
>
> Помогите составить запрос, пожалуйста?
>


From: Diter - 25/05/2009 - 07:41:56
Subject:Не могу составить запрос
-----------------
Можно попробовать так:

1) Подсчитываем количество сотрудников в каждом отделе из предложенного списка (куда входит и отдельный сотрудник тоже):

SELECT id2, COUNT(*) as total
FROM Связь
WHERE id1 IN (51,53,55,57)
GROUP BY id2

2) Далее сравниваем значение total c количеством сотрудников из предложенного списка (куда входит и отдельный сотрудник: в данном примере это 4):

то есть либо Вы сравниваете все на уровне клиента, работающего с базой данных, и отбираете только те записи, значение total которых равен 4, либо переписываете запрос из 1) таким образом:

SELECT tab1.id2 FROM
(SELECT id2, COUNT(*) as total
FROM Связь
WHERE id1 IN (51,53,55,57)
GROUP BY id2) as tab1
WHERE tab1.total='4'

В последнем примере запроса: если вернется пустой результат, то это будет означать, что не существует такого отдела, куда бы входили все сотрудники из предложенного списка. Иначе будет выдан список отделов, в которые входят все сотрудники из предложенного списка.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
35633



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |