@dimitriy_tkachenko

Как правильно составить sql запрос?

Работаю с postgres на python. Есть таблица test. В ней есть поля id(primary key), hash, on.
test
id | hash | on
1 | aaa | true
2 | aaa | true
3 | bbb | true
4 | aaa | false
Мне нужна рандомная строка, где on IS TRUE, но, если есть еще строки с одинаковым значением поля hash - то и они тоже(на самом деле достаточно только id тех строк, где совпaдает hash, но у них то же должно выполняться условие on IS TRUE).
'''SELECT f.id, t.id FROM test AS f LEFT JOIN test AS t ON t.hash = f.hash WHERE f.on IS TRUE AND (t.on IS TRUE AND t.id != f.id) ORDER BY random() LIMIT 1'''

t.id != f.id - что бы не было результата первая + первая строка. Результат - первая + вторая строки или вторая + первая или None. Использую LEFT JOIN но не понимаю, почему в результате никогда нет третьей строки (третья + none). Где моя ошибка и как мне получить желаемый результат?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Например так:
select * from test 
join (
	select "hash" from test where "on" order by random() limit 1
) t on t.hash = test.hash;


PostgreSQL online fiddle
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы