| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > жесткий select мне задали на собеседовании |
| Автор: the_buddha 5.10.2010, 22:26 |
| Всем привет, на собеседовании мне дали решить один как мне кажется жесткий задач. У нас есть таблица t1(user_id, group_id) я конечно объясню что это за таблица, но если чесно это все не важно, важно сделать выборку именно по ней, по идее есть таблиц юзер и есть таблица группа, и наша таблица t1 для отношения многие ко многим Так вот надо выбрать из нашей таблицы t1 все group_id у которых user_id равно 1, 2 (к примеру, это же у нас внеш ключи к таблице юзер) причем равно одновременно пример с данными нашей таблички user_id , group_id 1 1 2 1 1 2 2 3 Вот нужно составить запрос, которые вернет один резульат group_id равный 1, так как тока у него в нашей табле, оба резалта по юзер айди есть. Да, кстати мне еще сказали что данная задача решается, аж тремя возможными вариантами. Гуру ПОМОГИТЕ. |
| Автор: the_buddha 5.10.2010, 22:43 |
| Один из вариантов я допер, но сказали что их 3 вот мой первый вариант SELECT group_id FROM t1 WHERE group_id IN (SELECT group_id FROM a_usergroup WHERE user_id = 1) AND user_id = 2; |
| Автор: Gluttton 5.10.2010, 23:19 | ||||||
Пока они не подошли выскажу свое мнение:
Ничего не проверял на сервере, поэтому могут быть ошибки, но идея, я думаю, просатривается. |
| Автор: Frees 6.10.2010, 07:00 | ||
может я что то не понял, но зачем подзапросы?
|
| Автор: Deniz 6.10.2010, 07:39 | ||||||
Gluttton, первый запрос наверно можно упростить:
Вот еще один вариант (вроде похоже на правду):
Добавлено через 6 минут и 49 секунд Gluttton, второй запрос неправильный, правильнее так:
|
| Автор: Akina 6.10.2010, 07:51 | ||
Это при условии, что нет дублирования записей и что вывести надо и запись о группе, в которой кроме юзеров 1 и 2, могут присутствовать и другие юзеры. Если нет - следует дополнительно группировать по t1.group_id и проверять count(t1.group_id)=1. Добавлено через 2 минуты и 17 секунд PS. В данном конкретном случае можно проверки tN.group_id поместить не в условии связывания, а в условии отбора - разницы никакой. |