Вы должны заключить user
в []
, в противном случае он обрабатывается как вызов функции:
select asuers.[user]
from (select distinct [user] from test where product = 'a') ausers
cross apply (select distinct [user] from test) busers
Поскольку вы, вероятно, будете использовать хранимые процедуры для некоторых операций, убедитесь, что они действительно работают достаточно хорошо для ваших нужд! По моему опыту, это может быть проблемой, если вы используете MySQL.
Относительно нового требования (множественные родители): теперь вы используете гораздо более проблемные вещи при использовании СУБД, в зависимости от того, какие запросы вам нужно выполнять данные. Я сравнил подход RDBMS с использованием базы данных графов на на этой вики-странице . Если вас интересует только подход RDBMS, взгляните на Модель для представления направленных ациклических графов (DAG) в базах данных SQL .
Ваша потребность в нескольких родителях сразу же нарушает фундаментальную природу вложенных множеств, как указано в вашей ссылочной статье, поэтому я сказал бы, что вы собираетесь начать с неприятностей. Поскольку вы будете использовать реляционную базу данных, которая (используя ее основные возможности) будет обрабатывать все, что вы описали до сих пор, я думаю, что просто работа в этой концептуальной структуре и оттачивание ваших навыков обеспечат все, что вам нужно, без добавления дополнительных абстракций, которые (по крайней мере, в этом случае) не добавляйте никакого значения.
Если вы все еще хотите пойти туда, я бы назвал это сетевой структурой узлов. Вот ссылка .