Вы не можете INSERT
в CTE.CTE - это логическая таблица, это псевдоним набора результатов.Вы можете SELECT
из CTE.Не совсем уверен, чего вы там добиваетесь.
ОШИБКА: отношение "matrix_cte" не существует
Это сообщение об ошибке означает, что вы можете INSERT
только вотношения (таблицы).CTE - это не таблица, это не постоянный объект в базе данных, и в вашей базе данных нет таблицы с именем matrix_cte
.
Чтобы сгенерировать все отношения, как прямые, так и обратные, вы можете UNION
два набора результатов вместе.Если ваша исходная таблица имеет отношения только в одном направлении, тогда вы можете использовать UNION ALL
, и запрос будет быстрее.Я имею в виду, если в исходной таблице никогда не бывает двух строк для одной и той же пары единиц:
unit1, unit2, 1
unit2, unit1, 2
, тогда вы можете использовать UNION ALL
ниже.Если в исходной таблице могут быть такие дубликаты, вы должны использовать UNION
для удаления дополнительных дубликатов.
-- all direct relationships as they are
SELECT
lookup_unit,
lookup_unit_2,
lookup_unit_relationship
FROM register_unit_matrix
UNION
-- inverse all relationships
SELECT
lookup_unit_2,
lookup_unit,
CASE WHEN lookup_unit_relationship = 1 THEN 2 ELSE 1 END AS lookup_unit_relationship
FROM register_unit_matrix
Вы можете поместить этот запрос выше в представление или использовать как есть.