涉及两个表的SQL查询

时间:2013-06-20 09:13:13

标签: c# asp.net sql sql-server sql-server-2008

我有两张桌子, tbl_msg ...

tbl_msg

tbl_user

tbl_user

我想从tbl_msg中选择所有来自toid = 42的msgs以及发送了msg的人(而不是fromid)的相应名称。结果看起来应该是这样的......

|fromid(name, not the id)| Msg| toid(name!,which belongs to id 42)|some other column from msgid|

查询:

select tbl_msg.[MsgId]       
  ,tbl_User.FirstName  as sentby    
  ,tbl_msg.[ToId]
  ,tbl_msg.[Msg] 
from 
   tbl_msg 
inner join 
   tbl_User on tbl_msg.FromId = tbl_User.ID  
where 
   tbl_msg.ToId = 42

但这只会给我相应fromid的名称,而不是toid和fromid的名称

如何做到这一点?

3 个答案:

答案 0 :(得分:5)

您必须两次加入用户:

select m.[MsgId]
  ,u1.FirstName  as sentby
  ,u2.FirstName as sentTo
  ,m.[Msg]
from tbl_msg m
inner join tbl_User u1 on m.FromId = u1.ID
inner join tbl_User u2 on m.ToId = u2.ID
where m.ToId = 42

答案 1 :(得分:0)

尝试将ON tbl_msg.FromId=tbl_User.ID改为tbl_msg.ToId=tbl_User.ID而不是:

select tbl_msg.[MsgId]       
,tbl_User.FirstName  as sentby    
,tbl_msg.[ToId]
,tbl_msg.[Msg] from tbl_msg inner join tbl_User 
 on tbl_msg.ToId=tbl_User.ID 
 where   tbl_msg.ToId=42

答案 2 :(得分:0)

希望此查询能为您提供帮助。

select tbl_msg.[MsgId]       
  ,u1.FirstName  as sentby    
  ,u2.FirstName as FromSent
  ,tbl_msg.[ToId]
  ,tbl_msg.[Msg] from tbl_msg 
  inner join tbl_User u1 on tbl_msg.FromId=u1.ID  
  inner join tbl_User u2 on u1.ToID =  u2.ID
  where tbl_msg.ToId=42