Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

выбрать одинаковые записи: часть 2

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Пт Фев 29 2008 00:49    Заголовок сообщения: выбрать одинаковые записи: часть 2 Ответить с цитатой

Задача следующая. Есть таблица с двумя целочисленными полями. Есть так же буфер из неких целых чисел (не в таблице - в уме). Надо найти записи, где первое поле хранит одно из чисел буфера, а второе поле - число, которое встречается в записях для каждого другого числа из буфера.
Например, в буфере лежат числа 1, 2 и 4.

1) 1 1
2) 1 3
3) 2 1
4) 2 2
5) 2 3
6) 3 1
7) 3 5
8) 4 1
9) 4 3

Записи №№6 и 7 вообще нам не интересны, так как число из первого поля отсутствует в буфере.
Запись №4 не подходит, потому что число из второго поля не найдено для всех чисел буфера, указанных в первом поле.
Надеюсь, понятно объяснил. Меня, собственно, интересуют числа второго поля (в приведенном примере - это 1 и 3).
Варианты с вложенными запросами для каждого числа из буфера я имею в виду, но хотелось бы проверить, есть ли что-нибудь "по-практичнее".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Вс Мар 02 2008 01:27    Заголовок сообщения: Ответить с цитатой

На самом деле, до сегодняшнего дня я даже не догадывался, что Access (у меня база на Access'е) позволяет размещать вложенный запрос в блоке FROM! Как только узнал, не составило труда и решить свою задачку. Если кому надо, то:

select F2 from (select F2, count(F2) as c from (select F1, F2 where F1 in (B)) group by F2) where c = N

F1, F2 - первое и второе поля таблицы.
B - буфер; искомые числа первого поля через запятую.
N - длина буфера; кол-во искомых чисел.

Поясню. Сначала мы отбираем записи, первое поле которых содержит какое-либо число из буфера. Если брать пример заглавного поста, то мы получим записи с №1 по №5, №8 и №9. Далее из этой таблицы создаем другую: первый столбец - числа, встречающиеся во втором столбце таблицы, второй столбец - количество их вхождений. Получаем следующие записи: (1 3), (2 1), (3 3). Осталось из них выбрать записи, где значение второго поля равно значению чисел буфера (в нашем случае - 3). Таких записей две - (1 3) и (3 3). Теперь мы знаем, что со всеми числами из буфера в записях встречаются числа 1 и 3. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...