Вот решение на Oracle.
Достоинства:
1. Подобрано максимально короткое описание вспомогательной выборки factor от 1 до 10 без перечисления ее элементов или обращения к другим таблицам.
2. Поскольку нужно получить декартово произведение вспомогательной выборки, и не хочется повторять ее описание, то используем with.
3. Не нравится писать слово join? У декартового пересечения нет условий, значит с соединением таблиц справится обычная запятая.
Недостатки:
1. СУБД должна мочь в рекурсивные запросы ( ... connect by ... ).
2. СУБД должна мочь в выносимые запросы (with ...).
3. Скорость рекурсии несколько ниже чем просто перебор описания 10 строк.
with factor as (select level as lvl from dual connect by level < 10)
select to_char(f1.lvl) || 'x' || to_char(f2.lvl) || '=' || to_char(f1.lvl * f2.lvl) as multi
from factor f1,
factor f2