мне нужно вернуть отчетливыми идентификаторы записей, которые удовлетворяют следующие условия: должен иметь записи с полем reason_of_creation = 1 и не должен иметь записи с полем reason_of_creation = 0 или в том же нулевая время. Пока я был в состоянии сделать это, я продолжаю задаваться вопросом, есть ли более элегантный (даже рекомендуемый) способ сделать это.Возвращаясь только идентификаторы записей, которые соответствуют критериям
Вот анонимная версию того, что у меня есть:
select distinct st.some_id from (
select st.some_id, wanted.wanted_count as wanted, unwanted.unwanted_count as unwanted
from some_table st
left join (
select st.some_id, count(st.reason_of_creation) as wanted_count
from some_table st
where st.reason_of_creation=1
group by st.some_id
) wanted on wanted.some_id = st.some_id
left join (
select st.some_id, count(st.reason_of_creation) as unwanted_count
from some_table st
where st.reason_of_creation=0
group by st.some_id
) unwanted on unwanted.some_id = st.some_id
where wanted.wanted_count >0 and (unwanted.unwanted_count = 0 or unwanted.unwanted_count is null)
) st;
Sample данные:
some_id reason_of_creation
1 1
1 0
2 1
3 null
4 0
4 1
5 1
желаемого результат будет список записей с some_id = 2, 5
простой и элегантный – ninesided
Это именно то, что я надеялся получить здесь, более простой способ сделать это, благодаря мужчине! –