Как фильтровать логику в SQL, где элемент отсутствует для одного из пользователей

#sql #oracle

Вопрос:

У меня есть таблица, и мне нужно узнать имя человека, у которого нет Iphone? Например. запрос должен быть указан в таблице ниже как Майк.

Я пытаюсь построить логику, используя группу по имени и элементам, где элемент не равен Iphone, или используя таблицу 2, но не могу получить результат, может ли кто-нибудь предложить ?

Имя Товары
Саймон IPhone
Саймон Таблица
Саймон Смотреть
Саймон Ноутбук
Джим IPhone
Джим Таблица
Джим Смотреть
Джим Ноутбук
Майк Таблица
Майк Смотреть
Майк Ноутбук

Комментарии:

1. Айфон , конечно 🙂

Ответ №1:

У меня есть таблица, и мне нужно узнать имя человека, у которого нет Iphone?

Используя свою таблицу, вы можете использовать агрегацию:

 select name
from t
group by name
having sum(case when item = 'Iphone' then 1 else 0 end) = 0;
 

having Предложение подсчитывает количество строк с айфонами. В = 0 нем говорится, что для имени их нет.

Ответ №2:

Мне нравится ответ Гордонса, но это может быть проще понять:

 select name
from table
where name not in 
(select name 
from table
where item like 'Iphone')
 

Если вам нужна только одна запись для каждого имени, перейдите к этому в конце:

 group by name