2012-01-07 64 views
2

我有兩個表:MySQL在同場參加

  1. 消息 - 用以下結構

    ID
    SENDER_ID
    receiver_id
    MESSAGE_TEXT

  2. 用戶 - 用以下結構

    ID
    暱稱

我需要連接這兩個表,所以我得到結果是這樣的:

message_id, sender_nickname, receiver_nickname, message_text 

sender_id始終設置。問題是我還需要郵件,因爲receiver_id爲0,所以receiver_id不能在user表中找到。

有人可以幫助我嗎?

回答

2
select 
m.id, 
u1.nickname as sender, 
u2.nickname as receiver, 
m.message_text 
from messages as m 
left join users as u1 on u1.id = m.sender_id 
left join users as u2 on u2.id = m.receiver_id 
+0

非常感謝您對您的解決方案它的工程! :) – user1135798 2012-01-07 10:47:17

+0

不客氣。 :) – 2012-01-07 10:57:12

1

看起來是這樣的:

SELECT m.id AS message_id 
     ,u1.nickname AS sender_nickname 
     ,u2.nickname AS receiver_nickname 
     ,m.message_text 
FROM messages m 
LEFT JOIN users u1 ON u1.id = m.sender_id 
LEFT JOIN users u2 ON u2.id = m.receiver_id 

一個LEFT [OUTER] JOIN保證,如果右手錶中沒有匹配值左手錶將不會被排除在外。

+0

非常感謝您的解決方案Erwin,它的工作原理:) – user1135798 2012-01-07 10:47:44

1
SELECT ... 
FROM messages 
INNER JOIN users AS senders ON senders.id = messages.sender_id 
LEFT JOIN users AS receivers ON receivers.id = messages.receiver_id 

並且當沒有數據時,將receiver_id列保留爲NULL而不是INT值爲0。

0

將消息表加入receiver_id上的用戶表時,應該使用左外連接。

0

您可以使用它外連接

select 
m.id as message_id, us.nickname as sender_nickname, ur.nickname as receiver_nickname, m.message_text as message_text 
from messages m join users us on us.id = m.sender_id 
left outer join users ur.id = m.receiver_id 
where m.id = <your message id>