Sql join,2个表,相同的字段

Lob*_*uno 1 sql sql-server

我有2张桌子.简化:

表1,用户:


userId int,userName nvarchar(50)


表2,消息:


msgId int,msgFrom int,msgTo int ...


msg1和msg2都包含userId.现在我想获取所有消息,但我想要用户名而不是msgFrom.我知道该怎么做:

    select tabMessages.*, tabUsers.userName as Sender 
      from tabMessages 
inner join tabUsers on msgFrom=userId 
where msgId = @someParameter;
Run Code Online (Sandbox Code Playgroud)

一切都很好,花花公子.获取用户名而不是msgTo是一样的.现在的问题是,如何在同一个呼叫中获取两个字段?我想得到这张桌子


msgId,msgFrom,msgTo,发件人,收件人.我试过:

    select tabMessages.*, tabUsers.userName as Sender, 
           tabUsers.userName as Recipient 
      from tabMessages 
inner join tabUsers on msgFrom=userId and msgTo=userId 
     where msgId = @someParameter;
Run Code Online (Sandbox Code Playgroud)

但这不起作用.顺便说一下,我正在使用Ms sql2000.

Anp*_*her 9

使用不同的别名加入用户表两次.首先连接到from列,第二个连接到to列.

select m.*, u1.userName as Sender, u2.userName as Recipient 
from tabMessages as m 
  inner join tabUsers as u1 
    on u1.userId=m.msgFrom 
  inner join tabUsers as u2 
    on u2.userId=m.msgTo 
where m.msgId = @someParameter;
Run Code Online (Sandbox Code Playgroud)