Я подозреваю, что UnitCategoryUser используется в качестве универсальной таблицы для отношений между пользователями, категориями и единицами, так что единицы записываются как принадлежащие категориям в записях, где идентификатор пользователя равен нулю, и пользователи могут получить доступ к единицам, даже если у них нет доступа к своим категориям, где categoryid равен нулю.
Было бы также возможно, чтобы единицы принадлежали к нескольким категориям, а пользователи могли регистрироваться как имеющие доступ к одним и тем же единицам времени, когда пользователь может получить доступ к нескольким категориям (каждая из которых может получить доступ к одному и тому же модулю). ) и когда пользователю был предоставлен доступ к устройству без доступа к категории, затем впоследствии был предоставлен доступ к категории.
Следующий запрос должен вернуть все единицы для указанного пользователя:
select distinct u.name
from unit u
join unitcategory uc on u.id = uc.unitid
join unitcategoryuser ucu on uc.category_id = ucu.categoryid
where ucu.userid = YourUserID
union
select distinct u2.name
from unit u2
join unitcategoryuser ucu2 on u2.id = ucu2.unitid
where ucu2.userid = YourUserID