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