Если количество элементов достаточно мало, вы можете перебором с помощью SQL. Это может быть быстрое решение, но вы, вероятно, хотите сделать что-то умнее. Звучит как " проблема с рюкзаком ", которая завершена NP.
Если количество элементов велико, вам нужно углубиться в алгоритмы динамического программирования. Вы должны спросить себя, насколько это важно для вашего заявления.
Если количество предметов относительно невелико, вы можете сделать это. SQL-оператор грубой силы (то, что вы просили), который находит комбинации из 1,2 или 3 элементов, которые соответствуют, выглядит следующим образом. Если это неудовлетворительно, возможно, SQL не является подходящим инструментом для этой работы.
SELECT
i1.id AS id1,
NULL AS id2,
NULL AS id3,
i1.amount
FROM
items i1
UNION ALL
SELECT
i1.id AS id1,
i2.id AS id2,
i3.id AS id3,
i1.amount + i2.amount AS total
FROM
items i1,
items i2
WHERE
i1.amount + i2.amount = 30 AND
i1.id <> i2.id AND
i1.id <> i3.id
UNION ALL
SELECT
i1.id AS id1,
i2.id AS id2,
i3.id AS id3,
i1.amount + i2.amount + i3.amount AS total
FROM
items i1,
items i2,
items i3
WHERE
i1.amount + i2.amount + i3.amount = 30 AND
i1.id <> i2.id AND
i1.id <> i3.id AND
i2.id <> i3.id
В Oracle вы использовали бы функцию CUBE, чтобы превратить ее в универсальную версию, не уверенную в эквиваленте MySQL.