Работаю с 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). Где моя ошибка и как мне получить желаемый результат?