#sql #sql-server #join #select
#sql #sql-сервер #Присоединиться #выберите
Вопрос:
У меня есть эта таблица ниже
Table Assignments
AssignmentID: int
LinkedTo: varchar(50)
AssignedUser: int
AssignedBy: int
где AssignedBy
и AssignedUser
— это внешние ключи из таблицы Users
. Вот что Users
выглядит так
UserKey:int
Username:varchar(50)
Как я могу выполнить внутреннее соединение, где я получаю оба AssignedBy
и AssignedUser
?
Следующее дает мне один из них, но как я могу получить оба? Кстати AssignedBy
, и AssignedUser
это два разных Users
. Я пытаюсь получить Users.Username
select Users.Username
from Assignments
INNER JOIN Users ON Assignments.UserKey = Users.UserKey
Ответ №1:
Если вы хотите, чтобы оба имени пользователя были в одной строке, вам нужно присоединиться Users
дважды, например
SELECT UA.Username AS AssignedUserName, UB.Username AS AssignedByUserName
FROM Assignments A
INNER JOIN Users UA ON A.AssignedUser = UA.UserKey
INNER JOIN Users UB ON A.AssignedBy = UB.UserKey;
Если ваша цель состоит в том, чтобы иметь все имена пользователей, независимо от того, откуда они AssignedUser
или откуда AssignedBy
, вы должны использовать UNION
SELECT U.Username
FROM Assignments A
INNER JOIN Users U ON A.AssignedUser = U.UserKey
UNION SELECT U.Username
FROM Assignments A
INNER JOIN Users U ON A.AssignedBy = U.UserKey;
Однако обратите внимание, что это приведет к удалению повторяющихся имен пользователей. Если вы хотите сохранить дубликаты, используйте UNION ALL
.
Ответ №2:
Вам нужно два соединения:
SELECT assigned.username AS assigned_username
assigned_by.username AS assigned_by_username
FROM assignments a
JOIN users assigned ON a.assigneduser = assigned.userkey
JOIN users assigned_by ON a.assignedby = assigned_by.userkey