Y
4 X
4 Y
5 X
Мне нужно сгруппировать и найти только те ID, в которых НЕТ Y ,но есть X?
То есть тут мне нужно только 1, 5
select x.id from tbl as x left join (select id from tbl where param = 'y') as y on y.id = x.id where x.param == 'x' and y.id is null
Ищи id с param=x, а потом примени except param=y
Это, кстати, крайне неортодоксальный синтаксис LEFT JOIN. Я подозреваю, что postgres это соптимизирует точно такжэ, как и классический вариант -- но в общем это немного рискованно. так-то обычно -- просто имя таблицы и условие в ON ``` select x.id from tbl as x left join tbl as y on y.param = 'y' AND y.id = x.id where x.param == 'x' and y.id is null ```
да, я соглашусь, "полихачил"
Обсуждают сегодня