Вы можете получить все пары, используя самостоятельное соединение:
select t1.*, t2.*
from t t1 join
t t2
on t1.id < t2.id and -- no need for duplicates
t1.total + t2.total = 7;
Это помещает результаты в одну строку - что имеет больше смысла, так что вы знаете, какие пары добавляют до 7
.
РЕДАКТИРОВАТЬ:
Вы можете добавить дополнительные join
s, если вы хотите больше строк:
select t1.*, t2.*
from t t1 join
t t2
on t1.id < t2.id and -- no need for duplicates left join
t t3
on t2.id < t3.id
where t1.total + t2.total + coalesce(t3.total, 0) = 7;
Из-за характера ваших данных - наименьшее значение равно «2», и вы хотите, чтобы итоговое значение было «7» - максимальное количество строк равно 3. Таким образом, приведенный выше ответ на вопрос, который вы задали.
Более общий подход будет использовать рекурсивные CTE.