Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Интересный запрос с группировкой и селектами


Автор: MaratCrash 13.9.2011, 01:36
Всем привет.
Имеются 2 таблицы:

1. users (пользователи)                                                 
id          name
1           Саша
2           Маша
3           Петя
4           Вася


2. phones (телефоны)
id          u_id          phone          phone_type (тип телефона: рабочий, домашний и т.д.)
1           1              1234            1
2           1              1234            2 (да да, у одного человека может быть один номер телефон на 2 типа)
3           1              9999            3 
4           2              1234            1  
5           3              876              1


Нужно найти всех пользователей, у которых имеются одинаковые телефоны (дупликаты телефонов нужно найти). Т.е. Саша и Маша имеются одинаковые теелфоны. Т.е. как минимум должно быть 2 телефона одинаковых у разных пользователей.

Результат запроса должен быть таким:

id юзера,     phone (или phone_id)
1                 1234   
2                 1234





 долго бился с запросом )) ни к чему не пришел )) Давай так. Если усложняют дело типы теелфонов, то давайте без низ них. Они путают.

Автор: Zloxa 13.9.2011, 07:51
Код

select /*distinct*/ u_id,phone from phones t where exists (select null from phones s where s.u_id != t.u_id and t.phone = s.phone)

Автор: MaratCrash 13.9.2011, 14:56
Угу, спасибо за вариант!
Я вчера сделал вот так. Что будет быстрее: ваш вариант или мой?

Код

select distinct c.*, cp.phone from users as c
left join phone as cp on cp.u_id = c.id and cp.phone IN (
    select cp.phone
    from phone as cp
    group by cp.phone
    having count(cp.phone) > 1
)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)