Size: a a a

2021 January 26

IZ

Ivan Zaitsev in Random Ruby Chat
Я тебя не понял просто)
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Что тебе не ясно? Какие там значения что ли?
источник

NB

Nikita Batrak in Random Ruby Chat
напиши схему 3 таблиц, с рандомными данными и покажи что хочешь на выходе
источник

VS

Viacheslav Soldatov in Random Ruby Chat
Ivan Zaitsev
Пример:
N1 имеет Y: [], X: []
N2 имеет Y: [active: false], X: []
N3 имеет Y: [active: false], X: [active: false]
Вот такие подходят под условие
под те скуэли которые я написал выше подходит
источник

RV

Roman V in Random Ruby Chat
Nikita Batrak
тебя ударить?
омон в чате, все запотеваем
источник

NB

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

IZ

Ivan Zaitsev in Random Ruby Chat
Таблица N:
ID
1
2
3
4

Таблица X:
ID, ACTIVE, N_ID
1, true, 1
2, false, 1
3, false, 1
4, true, 2
5, false, 3

Таблица Y:
ID, ACTIVE, N_ID
1, false, 3
2, true, 1
3, false, 1


На выходе нужно:
ID
3
4
источник

NB

Nikita Batrak in Random Ruby Chat
а где таблица Y?
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Сек случайно отправил
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Как то так
источник

NB

Nikita Batrak in Random Ruby Chat
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 = false or x.active = false
group by n.id
источник

IZ

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

Все N у которых нет X и Y
И
Все N у которых те X или Y что есть имеют active = false
источник

IZ

Ivan Zaitsev 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 = false or x.active = false
group by n.id
Сейчас попробую, спасибо
источник

VS

Viacheslav Soldatov in Random Ruby Chat
SELECT 
 id,
 COUNT(*) as count
FROM
(
 SELECT n.id as id
    FROM n
      LEFT JOIN x ON n.id = x.n_id
    WHERE x.active = false OR x.active IS NULL
 UNION ALL
 SELECT n.id as id
    FROM n
      LEFT JOIN y ON n.id = y.n_id
    WHERE y.active = false OR y.active IS NULL
)
GROUP BY 1
HAVING count > 1

вариант без сте)
источник

RV

Roman V 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 = false or x.active = false
group by n.id
не учел что у одного N может быть много вхождений в промежуточную таблицу, и они друг на друга влияют
источник

RV

Roman V in Random Ruby Chat
то есть в его примере 1 не попадает в результат потому что у него есть по крайней мере один Y или X с active=true где-то там возможно вниз по джойну
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Roman V
то есть в его примере 1 не попадает в результат потому что у него есть по крайней мере один Y или X с active=true где-то там возможно вниз по джойну
+
источник

NB

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

NB

Nikita Batrak in Random Ruby Chat
там 2й запрос чуть переписать
источник

NB

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