【发布时间】:2015-12-29 13:17:34
【问题描述】:
假设我有两张桌子
Create table tblMessages
(
MessageId int primary key identity,
Title nvarchar(max),
Body nvarchar(max),
MsgFrom nvarchar(10),
MsgTo nvarchar(10),
SentDateTime datetime,
MsgRead int default 0
)
和
Create table tblAllUsers
(
Id int primary key identity,
UserId nvarchar(100,
FullName nvarchar(50)
)
这是一个存储过程,我尝试为登录用户显示我的消息
Alter proc spExtractInbox
@UserId nvarchar(10)
as
begin
Select * from tblMessages
INNER JOIN
tblAllUsers ON tblMessages.MsgTo = tblAllUsers.UserId
where tblMessages.MsgTo=@UserId order by tblMessages.SentDateTime desc
end
上面的查询可以很好地显示发件人的消息和用户 ID(MsgFrom),但我想显示存储在 tblAllUsers 中的发件人的名称。我在 grdiview 中使用它。我不确定我是否我正在解释它的最佳方式。
问题是 join 已经根据 tblMessages.MsgTo = tblAllUsers.UserId 加入两个表。那么我怎么可能通过 tblMessages.MsgFrom = tblAllUsers.UserId 来获取发件人姓名呢?
【问题讨论】:
-
在 where 子句之前添加:inner join tblAllUsers on tblMessages.MsgFrom = tblAllUsers.UserId
-
并将 select * 替换为您在 proc 中真正需要的列名
-
@JulienVavasseur - “FROM 子句中的对象“tblAllUsers”和“tblAllUsers”具有相同的公开名称。使用相关名称来区分它们。”
标签: sql-server stored-procedures inner-join