2015-10-17 86 views
0

那麼可以說我有一個消息實體,它具有字段發件人和收件人,兩者都由用戶實體的外鍵存儲在數據庫中。對於消息表的表結構可能是這樣的:SQL:如何在多列指向相同的其他表時進行連接?

id int(11) Not Null primary, autoincrement 
sender int(11) Not Null 
recipient int(11) Not Null 
title varchar(50) Not Null 
content varchar(1000) Not Null 
datesent datetime Not Null 
status varchar(10) Not Null 

正如你看到的,該消息表有兩個外鍵(發件人和收件人),並都指向同一個用戶表。當然,我可以選擇延遲加載,因此不要編寫連接查詢,而是編寫兩個單獨的查詢來分別爲發件人和收件人加載用戶。如果我只是從表中加載一條消息,它工作正常,但是當您查看消息列表時,它可能會顯着影響性能。

那麼我怎麼能編寫一個SQL查詢加入消息表與用戶表,當我需要發件人和收件人列加入?任何人都知道完成這項任務的訣竅?

+0

與用戶表連接兩次。提示,使用別名:) –

回答

0

如果我你的問題試圖加入「用戶」表兩次有IDS 例真已瞭解:

select * from Message m left join user se on se.id = m.sender_id 
left join user re on re.id = m.recipient_id 
0

這樣的事情應該工作

select m.*,s.username,r.username 
from message m 
inner join user s on m.sender = s.userid 
inner join user r on m.recipient = r.userid 

如果有一些發件人誰不在user表中有任何條目,然後使用左連接

相關問題