Я использую MariaDB ColumnStore и в ColumnStore, Круговые объединения не поддерживаются.
В моей базе данных есть данные об измерениях, отправленных из разных стран и клиентов.
Так что для разных ролей мне нужно иметь возможность фильтровать данные внутри представления.
Итак, эта структура у меня сейчас
TABLE Measurements:
Country Customer Measurement
a 1 150
a 2 200
b 3 250
У меня естьтаблица, которая отображает пользователей на роли
TABLE UsersToRoles:
Users Roles
x role1
y role2
У меня есть таблица, которая отображает роли на данные, которые ему разрешено видеть
TABLE RolesToData
Roles VariableType VariableValue
role1 Country a
role1 Customer 1
role1 Customer 2
role2 Country b
role2 Customer 3
Я создал следующий RoleView
CREATE VIEW RoleView AS (
SELECT UsersToRoles.User, Country, Customer FROM UsersToRoles.users AS User,
Country.VariableValue AS 'Country' FROM
((UsersToRoles JOIN RolesToData Country ON (UsersToRoles.Roles =
Country.Roles AND Country.VariableType = 'Country'))
JOIN RolesToData Customer ON (UsersToRoles.Roles = Customer.Roles AND
Customer.VariableType = 'Customer')))
, который возвращает следующий VIEW
User Country Customer
x a 1
x a 2
y b 3
Затем я хотел бы объединить таблицу измерений с RoleView как для страны, так и для клиента, например
CREATE VIEW FinalView AS (SELECT measurement.* FROM measurement JOIN RoleView ON
(measurement.country = RoleView.country AND measurement.customer = RoleView.customer))
Проблема заключается в том, чтоMariaDB ColumnStore не поддерживает циклические объединения.
Есть ли способ обойти кольцевые объединения без выполнения кругового соединения?
Возможно, путем создания нескольких представлений и выполнения левого или правого объединений для каждогоПосмотреть?
Был бы очень признателен, если бы нашел решение этой проблемы.
РЕДАКТИРОВАТЬ: ОБНОВЛЕНИЕ
Мне удалось быстро найти решение, яне уверен, будет ли это иметь серьезное влияние или нет.
Если вы используете CONCAT для одного из условий соединения, оно работает.
CREATE VIEW FinalView AS (SELECT measurement.* FROM measurement JOIN
RoleView ON
(measurement.country = CONCAT(RoleView.country,"") AND measurement.customer =
RoleView.customer))
Это основано на комментарии Андрея в этой теме
https://jira.mariadb.org/browse/MCOL-1205