SQL扩展查询

时间:2018-04-26 13:55:01

标签: sql sql-server tsql

在我的数据库中,我有这个表结构:

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  

2 个答案:

答案 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