Size: a a a

2021 January 26

SP

Sergey Pustovalov in Random Ruby Chat
Nikita Batrak
select *
from n
left join y on y.n_id = n.id
left join x on x.n_id = n.id
where (y.active is null and x.active is null) or
(y.active is null and x.active = false) or
(y.active = false and x.active is null)
group by n.id
(y.active is null and x.active is null) or
(y.active is null and x.active = false) or
(y.active = false and x.active is null)


заменяется же

y.active is distinct from true and x.active is distinct from true
источник

RV

Roman V in Random Ruby Chat
да, но работать все равно не будет)
источник

NB

Nikita Batrak in Random Ruby Chat
не будет, я уже понял суть вроде
источник

SP

Sergey Pustovalov in Random Ruby Chat
Roman V
да, но работать все равно не будет)
да я в суть не вникал, просто увидел как сократить
источник

NB

Nikita Batrak in Random Ruby Chat
это ты верно подметил
источник

IZ

Ivan Zaitsev in Random Ruby Chat
А по началу мне задачка совсем тривиальной казалась 😅
источник

RV

Roman V in Random Ruby Chat
источник

NB

Nikita Batrak in Random Ruby Chat
select
 n.id,
 array_cat(array_agg(y.active), array_agg(x.active))
from
 n
left join y on y.n_id = n.id
left join x on x.n_id = n.id
group by n.id
having (array_cat(array_agg(y.active), array_agg(x.active)) = ARRAY[]::bool[]) or
 (array_cat(array_agg(y.active), array_agg(x.active) @> ARRAY[false]::bool[] and not
   array_cat(array_agg(y.active), array_agg(x.active) @> ARRAY[true]::bool[])
источник

NB

Nikita Batrak in Random Ruby Chat
я не уверен
источник

RV

Roman V in Random Ruby Chat
мы аналогичные задачи именно так решали
источник

NB

Nikita Batrak in Random Ruby Chat
но что-то типа такого вроде как должно сработать
источник

NB

Nikita Batrak in Random Ruby Chat
не уверен на счет того, что это самое оптимальное решение
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Когда то поверхностно смотрел, видимо самое время вникнуть, спасибо
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Nikita Batrak
select
 n.id,
 array_cat(array_agg(y.active), array_agg(x.active))
from
 n
left join y on y.n_id = n.id
left join x on x.n_id = n.id
group by n.id
having (array_cat(array_agg(y.active), array_agg(x.active)) = ARRAY[]::bool[]) or
 (array_cat(array_agg(y.active), array_agg(x.active) @> ARRAY[false]::bool[] and not
   array_cat(array_agg(y.active), array_agg(x.active) @> ARRAY[true]::bool[])
Буду пробовать, спасибо
источник

NB

Nikita Batrak in Random Ruby Chat
т.е. ты формируешь массив значений из 2 таблиц и дальше просто 2 условия
источник

NB

Nikita Batrak in Random Ruby Chat
источник

NB

Nikita Batrak in Random Ruby Chat
на бумаге работает
источник

NB

Nikita Batrak in Random Ruby Chat
но я бы еще план на твоей выборке посмотрел
источник

NB

Nikita Batrak in Random Ruby Chat
потому что мб там больновато будет
источник

NB

Nikita Batrak in Random Ruby Chat
и будет проще каждый раз пересчитывать какое-то состояние n
источник