【发布时间】:2012-08-28 16:51:34
【问题描述】:
我尝试使用WITH 创建一个 SQL 语句,但我做错了。
我得到了以下表格;
组(ID、名称)
1, 'My app'
2, 'Local admins'
3, 'Global admins'
用户(1,姓名)
1, 'Arne'
GroupOwners(GroupId、OwnerType、OwnerId)
1, 'Group', 2
GroupMembers(GroupId、MemberType、MemberId)
2, 'Group', 3
3, 'User', 1
我正在尝试查找Arne 拥有的所有组。在这种情况下,它是My App。但问题是Local Admins 被设置为所有者。而Global admins 是Local admins 的成员。而Arne 终于成为Global admins 的成员了。
别管钻石了,它们是不正确的
嵌套因组而异。 (有些用户直接在 GroupOwners 中,而另一些则可能有一个用户作为成员的组)
是否可以用一个母亲的 SQL 语句来解决?附加约束:Groups/Users 在系统的其他地方使用。
【问题讨论】:
-
您需要为我们提供更好的数据库示例 ERD。您似乎在图表中将数据库实体与特定行(Arne 和 MyApp)混合在一起,使事情变得混乱。
-
不是ERD,而是说明不同对象之间的关系。将其与列出的表格及其值一起使用。或:
Group -> GroupOwners -> GroupMembers -> User。可能是Group -> GroupOwners -> GroupMembers -> GroupMembers -> User或Group -> GroupOwners -> User。总是一步通过 GroupOwner 和 0..* 一步通过 groupMembers
标签: sql-server database-design