|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.11.2012, 15:35 | #1 |
Новичок
Джуниор
Регистрация: 20.11.2012
Сообщений: 3
|
Сравнение одной записи с несколькими
Есть таблица с тремя полями
1 уникальный номер строки 2 наименование работника 3 наименование отдела сколько всего пользователей и отделов неизвестно Одному и тому же работнику может несколько раз поставлен в соответствие один и тот же отдел. Требуется вывести всех работников которые состоят во всех отделах. Пробовал поставить COUNT и сравнивать с COUNT DISTINCT но тогда нужен какая-то проверка вхождения в каждый из отделов Последний раз редактировалось Negaty; 20.11.2012 в 16:00. |
20.11.2012, 16:13 | #2 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
и ещё, задача явно учебная?! (в реально имя работника не может являться его идентифицирующим признаков, например, Ивановых И.И. явно может быть больше одного!) да и вообще, имхо, задача достаточно "безумная"... по поводу решения... с COUNT() идея хорошая (на мой взгляд, как бы даже безальтернативная!). я бы выбирал тех работников, у кого count() совпадает с количеством отделов (select count() from таблица group by Наименование_Отдела) |
|
20.11.2012, 16:28 | #3 |
Новичок
Джуниор
Регистрация: 20.11.2012
Сообщений: 3
|
да, не надо
да, учебная "Одному и тому же работнику может несколько раз поставлен в соответствие один и тот же отдел." совпадение по количеству может быть еще и в случае повторения его имени с одним и тем же отделом. В идеале как то совместить IN и ALL но ALL только с мат выражениями. Есть какой-нибудь способ подвыделения всех повторений [Имя] чтобы сравнить [Отдел]ы данные им в соотношение с DISTINCT[Отдел]? Последний раз редактировалось Negaty; 20.11.2012 в 16:31. |
20.11.2012, 16:46 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Во вложенном запросе сгруппировать по всем трем полям, внешний запрос делает то, что Serge_Bliznykov предложил. Да, если вложение во FROM СУБД допускает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
20.11.2012, 16:52 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
вхождение одно и того же работника в один и тот же отдел легко отбросить с помощью DISTINCT или с помощью
select Работник, Отдел from ТаблицаС group by Работник, Отдел я не берусь утверждать, что предложенный ниже вариант правильный, (и что единственный - тем более), но попробовать можно... Код:
мда.. самому не нравится, то что наворотил.. значит, должно быть более эффективное и красивое решение... |
22.11.2012, 15:29 | #6 |
Новичок
Джуниор
Регистрация: 20.11.2012
Сообщений: 3
|
спасибо вышеотписавшимся, в итоге придумал:
SELECT [USER] From tb_test Group by [user] HAVING COUNT(DISTINCT (otdel)) = (SELECT COUNT(DISTINCT (otdel)) FROM tb_test) |
22.11.2012, 16:20 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Negaty, браво!
вот теперь элегантно! И правильно! p.s. справедливости ради, хочу сказать, что мой вариант тоже был рабочим... Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удалить из файла абзац с номером К(абзацы отделяются друг от друга одной или несколькими пустыми строками | Ragnaradi | Помощь студентам | 21 | 01.05.2011 12:02 |
Сравнение нескольких ячеек с одной | Makintosh_87 | Microsoft Office Excel | 2 | 11.09.2010 02:00 |
Выделить из строки подстроки, разделённые одной или несколькими запятыми | Striker14 | Помощь студентам | 1 | 19.02.2009 08:33 |