2013-06-20 4 views
0

У меня есть две таблицы, tbl_msg ...Sql запрос с использованием двух таблиц

tbl_msg

tbl_user

tbl_user

Я хочу, чтобы выбрать все сбщ из tbl_msg где toid = 42 вместе с соответствующими именами человека (вместо fromid), от которого был отправлен msg. Результат должен выглядеть примерно так ..

|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

Как это может быть сделанный?

ответ

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 
+0

Msg 4104, Level 16, State 1, Line 8 Мульти-часть идентификатора "tbl_msg.ToId" не могут быть связаны. – Arbaaz

+0

Fxied. Попробуйте еще раз, и он будет работать :) – gzaxx

+0

Работает как шарм! ;) – Arbaaz

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 
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 
Смежные вопросы