2015-07-22 2 views
2

Пример: Допустим, у меня есть таблица customerphonedetails (customer_no, phone_no).Найти всех клиентов, имеющих несколько телефонных номеров в таблице

data is like this : 
customer_no =2 Phone_no=11 
customer_no =2 Phone_no=12 
customer_no =2 Phone_no=13 
customer_no =1 Phone_no=11 
customer_no =1 Phone_no=12 
customer_no =1 Phone_no=13 
customer_no =3 Phone_no=22 

Теперь я хочу написать запрос, который найдет customer_no, имеющий всеphone_no=(11,12,13).

Ожидаемый результат: Customer_no = (1,2).

ответ

2

Вы можете проверить, что все три Phone_no предусмотрено в where присутствуют для каждого customer_no используя having пункт:

select customer_no 
from customerphonedetails 
where Phone_no in (11, 12, 13) 
group by customer_no 
having count(distinct Phone_no) = 3 
+0

На самом деле мне нужно client_no, имея все (это обязательно). Ваш запрос даст мне клиент с телефоном, но я хочу только тех клиентов, у которых есть все три числа, назначенные им. Надеюсь, вы понимаете, что я пытаюсь спросить? Может быть, я не спрашиваю правильно. Прости. - –

+0

@AnkurVerma: запрос в ответе делает то, что вы хотите. – potashin

+0

Работая спасибо. –

0
select DISTINCT customer_no 
from table 
where phone_no in(11,12,13) 

Следует удалить дубликат записи.

+0

На самом деле мне нужно customer_no имея все (обязательно). Ваш запрос даст мне клиент с телефоном, но я хочу только тех клиентов, у которых есть все три числа, назначенные им. Надеюсь, вы понимаете, что я пытаюсь спросить? Может быть, я не спрашиваю правильно. Прости. - –

+0

Извините, что сказал Mukesh, но ваш запрос не приведет к правильному выводу, потому что он даст мне тот клиент, у которого будет либо 11,12, либо 13. Спасибо, кстати, за ответ. –

0

Это еще один способ выполнить это:

select distinct yes.customer_no 
from 
(select customer_no, count(*) over (partition by customer_no) as how_many_do_you_have 
from marcin.marcin) as yes 
where yes.how_many_do_you_have = (select count(distinct Phone_no) from marcin.marcin) 
Смежные вопросы