#sql #subquery
#sql #подзапрос
Вопрос:
Я только начал изучать sql и в настоящее время работаю над умножением матриц. У меня возникли проблемы с пониманием того, как использовать вложенный запрос в результате для выполнения матричного питания. (например, как A ^ 3) Должен ли я поместить подзапрос в предложение FROM или WHERE ? Ниже приведена моя попытка, и я получаю синтаксическую ошибку рядом с «(» на sqlite, что не очень полезно
SELECT A.i, A.j, SUM(A.val * A.val) AS val
FROM A, (SELECT A.i, A.j SUM(A.val * A.val) AS val
FROM A
WHERE A.i = A.i
GROUP BY A.i, A.j) AS B
WHERE A.i = B.j
GROUP BY A.i, B.j
Комментарии:
1. Это не ответ на более широкий вопрос, но из-за синтаксической ошибки, я думаю, вам не хватает запятой во второй строке
A.j SUM(A.val * A.val)
A.j, SUM(A.val * A.val)
. ЭтоWHERE A.i = A.i
также кажется немного странным.
Ответ №1:
Умножение матрицы в SQL будет выглядеть следующим образом:
select a.i, a.j,
(select sum(rows.val * cols.val)
from a rows cross join
a cols
where rows.i = a.i and
cols.j = a.j and
rows.j = cols.i
) as val
from a;
Комментарии:
1. Необходимо ли использовать подзапрос для A ^ 2? Для A * B я использую SELECT A.i, B.j, SUM(A.val * B.val) КАК val ИЗ A, B, ГДЕ A.j = B.i ГРУППИРУЮ ПО A.i, B.j; И я до сих пор не знаю, как сделать A ^ 3
2. @Han . . . Нет, но, на мой взгляд, проще сделать это с помощью подзапроса. Для большей мощности вы просто повторили бы логику умножения. Ничто не требует, чтобы
a
ссылки в подзапросе были той же таблицей,a
что и во внешнем запросе.