Фильтр SQL по типу по вторичному идентификатору

У меня есть такая таблица:

id idsec type
1  a     color
2  a     description
3  b     description
4  b     food
5  b     animal
6  c     color
7  d     descritpion

Я хотел бы выбрать все idsec, которые не имеют типа «цвет», сгруппированные по idsec.

Укажите ожидаемый результат. И покажите нам вашу текущую попытку запроса.

jarlh 18.12.2018 10:36

список "idSec"

Michael Mucci 18.12.2018 11:04

Просто какие-то ценности?

jarlh 18.12.2018 12:22

Нет ответа = -1 балл? РЖУ НЕ МОГУ. В любом случае я получил правильный ответ. Спасибо.

Michael Mucci 18.12.2018 16:10
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
4
86
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете использовать not exists:

select t.*
from table t
where not exists (select 1 from table t1 where t1.idsec = t.idsec and t1.type = 'color');

Вы также можете выполнить агрегирование:

select idsec
from table t
group by idsec
having sum(case when type = 'color' then 1 else 0 end) = 0;

Используйте нижеприведенный код: -

select idsec from table 
where idsec not in (select idsec from table where type = 'color')
group by idsec

Один из вариантов - использовать оператор набора minus.

with t(id,idse,type) as
(
 select 1,'a','color' from dual union all
 select 2,'a','description' from dual union all
 select 3,'b','description' from dual union all
 select 4,'b','food' from dual union all
 select 5,'b','animal' from dual union all
 select 6,'c','color' from dual union all
 select 7,'d','descritpion' from dual
)
select idse from t group by idse
minus   
select idse from t where type = 'color';

IDSE
----
 b
 d

или

select distinct idse from t
minus   
select idse from t where type = 'color';

IDSE
----
 b
 d

group by не нужен, если вы используете minus. Он сам избавляется от дубликатов.

Gordon Linoff 18.12.2018 13:20

Вам нужны различные значения idsec из таблицы:

SELECT 
  DISTINCT idsec 
FROM tablename t 
WHERE
  NOT EXISTS (
    SELECT 1 FROM tablename WHERE tablename.idsec = t.idsec AND tablename.type = 'color'
  );

Другие вопросы по теме