У меня есть такая таблица:
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.
список "idSec"
Просто какие-то ценности?
Нет ответа = -1 балл? РЖУ НЕ МОГУ. В любом случае я получил правильный ответ. Спасибо.


Вы можете использовать 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. Он сам избавляется от дубликатов.
Вам нужны различные значения idsec из таблицы:
SELECT
DISTINCT idsec
FROM tablename t
WHERE
NOT EXISTS (
SELECT 1 FROM tablename WHERE tablename.idsec = t.idsec AND tablename.type = 'color'
);
Укажите ожидаемый результат. И покажите нам вашу текущую попытку запроса.