在我的数据库中,我有这个表结构:
User table
--------------------
Id | User
--------------------
101 | UserA
102 | UserB
103 | UserC
UserGroup table
--------------------
Id | Group
--------------------
201 | GroupA
202 | GroupB
203 | GroupC
204 | GroupD
User2UserGroup table
--------------------
User | Group
--------------------
101 | 201
102 | 201
103 | 201
102 | 202
103 | 202
103 | 203
然后我有这种表,可以包含用户ID或userGroupId:
My table (Id is either user id or user group id)
--------------------
Id | other columns
--------------------
101 |
102 |
103 |
202 |
203 |
204 |
是否可以创建一个扩展此表的连接,如下所示:
Expanded table
----------------------------------------
UserId | GroupId | Id
----------------------------------------
101 | NULL | 101
102 | NULL | 102
103 | NULL | 103
101 | 201 | 201
102 | 201 | 201
103 | 201 | 201
102 | 202 | 202
103 | 202 | 202
103 | 203 | 203
答案 0 :(得分:0)
假设您的用户ID永远不会与groupid相同,您可以尝试使用以下查询来获得所需的输出。
的 See live demo 强>
select
UserId = coalesce(u.id,ug.[user]),
GroupId = g.id,
id = m.id
from
[MyTable] m left join [User] u
on m.id=u.id
left join [UserGroup] g
on m.id=g.id
left join [User2UserGroup] ug
on g.id=ug.[Group]
答案 1 :(得分:0)
如果userid和groupid没有相同的值,这将起作用:
SELECT
CASE WHEN GroupID IS NULL THEN ID ELSE UserID END,
GroupID,
CASE WHEN groupID IS NULL THEN ID ELSE GROUPID END
FROM Mytable K
FULL JOIN User2UserGroup G
ON K.ID = G.GroupID
ORDER BY GROUPID