tsql连接表有2个ID

时间:2018-01-16 11:43:47

标签: sql sql-server tsql

我有这些表(用户和会议):

UserId | Name
   1   | John
   2   | Linda
   3   | David

UserId_1 | UserId_2 | MeetingDate
   1     |     2    |  15/01/2018
   3     |     2    |  17/01/2018
   1     |     3    |  19/01/2018

如何从2个表中进行选择,以便在每一行中获取与每个ID相关联的名称?我想得到这样的东西:

UserId_1 | UserId_2 | User_1_Name | User_2_Name | MeetingDate
   1     |     2    |    John     |    Linda    |  15/01/2018
   3     |     2    |    David    |    Linda    |  17/01/2018
   1     |     3    |    John     |    David    |  19/01/2018

谢谢。

4 个答案:

答案 0 :(得分:5)

你只需要两个内连接:

SELECT m.UserId_1
    ,m.UserId_2
    ,u1.NAME
    ,u2.NAME
    ,m.MeetingDate
FROM Meetings m
INNER JOIN Users u1 ON u1.UserId = m.UserId_1
INNER JOIN Users u2 ON u2.UserId = m.UserId_2

答案 1 :(得分:2)

您只需要对表格中的一个或两个引用进行别名,您需要连接两次...

SELECT
  user1.UserId     AS UserId_1,
  user2.UserId     AS UserId_2,
  user1.Name       AS User_1_Name,
  user2.Name       AS User_2_Name,
  Meetings.MeetingDate
FROM
  Meetings
INNER JOIN
  Users   AS user1
    ON user1.UserId = Meetings.UserId_1
INNER JOIN
  Users   AS user2
    ON user2.UserId = Meetings.UserId_2

别名意味着您可以毫无歧义地引用您所指的Users实例。

答案 2 :(得分:1)

select Meetings.UserId_1,
Meetings.UserId_2,
isnull(a.Name,'--Unknown--') User_1_Name,
isnull(b.Name,'--Unknown--') User_2_Name,
MeetingDate
from Meetings left join Users a on Meetings.UserId_1 = a.UserID
left join Users b on Meetings.UserId_2 = b.UserID

答案 3 :(得分:1)

另一种方法是

SELECT m.UserId_1
    ,m.UserId_2
    ,(select name from Users where Users.id = m.UserId_1) as User_1_Name
    ,(select name from Users where Users.id = m.UserId_2) as User_2_Name
    ,m.MeetingDate
FROM Meetings m

此致

阿都

相关问题