firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.

Как оптимально сделать таблицу умножения?

Мой вариант.
SELECT 
    @N:=@N + 1 AS '',
    (@N * 1) AS '1',
    (@N * 2) AS '2',
    (@N * 3) AS '3',
    (@N * 4) AS '4',
    (@N * 5) AS '5',
    (@N * 6) AS '6',
    (@N * 7) AS '7',
    (@N * 8) AS '8',
    (@N * 9) AS '9',
    (@N * 10) AS '10'
FROM
    mysql.help_relation,
    (SELECT @N:=0) dum
LIMIT 10;


Просто предложите свои. Это не вопрос, не собеседование, просто интересно. Приветствуются как самые простые варианты, так и в стиле брэйнфака
  • Вопрос задан
  • 364 просмотра
Решения вопроса 1
@alexalexes
Вот решение на 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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы