Запрос на расширение SQL - PullRequest
       5

Запрос на расширение SQL

0 голосов
/ 26 апреля 2018

В моей базе данных есть структура таблицы:

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

и затем у меня есть такая таблица, которая может содержать либо идентификатор пользователя, либо 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 голосов
/ 26 апреля 2018

Это будет работать, если ID пользователя и группы не имеют одинаковых значений:

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
0 голосов
/ 26 апреля 2018

Предполагая, что ваш идентификатор пользователя никогда не совпадает с groupid, вы можете попробовать запрос, как показано ниже, чтобы получить желаемый результат.

Смотрите демо-версию

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...