我有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.
使用不同的别名加入用户表两次.首先连接到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)