2011-09-09 10 views
0
$sql="SELECT MAX(mr.messageId) AS maxMessageId, mr.threadId 
     FROM messages_recipients AS mr 
     RIGHT JOIN thread_recipients AS tr ON tr.threadId=mr.threadId 
     WHERE mr.recipientUserId='2' 
     GROUP BY mr.threadId"; 

行の正しい数を返さないJOIN 、 threadId = 1のthread_recipientsの行数と同じくらい多くの行を返すことが期待されますRIGHTは

ただし、これに関係なく1行しか返されません。

答えて

0

右結合は、結合された表のすべての行が戻されることを意味し、右表の一致しない行はすべて、左表のNULLで埋められます。

代わりに内部結合を使用していない理由はありません。

値を1つだけ戻す理由は、mr.threadidでグループ化しているためです。すべての行にthreadid = 1が設定されている場合、group byはそれらをすべて1つの行にグループ化します。

質問を誤解していますか?

+0

ありがとう@Martin Nielson。それで、どのようにしてクエリがテーブルのthread_recipientsにあるすべての行を選択するようにするのですか?tr.threadId = mr.threadIdと同時にGROUP BY mr.threadIdでmaxMessageIdを取得します。本当にありがとうございます。敬具J – jon

+0

あなたは何を返そうとしていますか?行のIDなどを気にしないで、何を達成しようとしていますか? –