Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интересный запрос с группировкой и селектами 
:(
    Опции темы
MaratCrash
Дата 13.9.2011, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.6.2011

Репутация: нет
Всего: нет



Всем привет.
Имеются 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





 долго бился с запросом )) ни к чему не пришел )) Давай так. Если усложняют дело типы теелфонов, то давайте без низ них. Они путают.
PM MAIL   Вверх
Zloxa
Дата 13.9.2011, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Код

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)


Это сообщение отредактировал(а) Zloxa - 13.9.2011, 07:52


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
MaratCrash
Дата 13.9.2011, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.6.2011

Репутация: нет
Всего: нет



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

Код

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
)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.