2011-12-23 15 views
4

私は3つのテーブルプロファイル、メッセージ、およびログインを持っています。これらは以下の図のように関連しています。メッセージ送信者とメッセージ受信者(メッセージテーブルの最後の2行)のユーザー名を表示します。このクエリは、受信者IDに関連付けられたユーザー名のみを表示します。何ができますか?関連付けられたユーザー名を表示するためにこれらのテーブルを結合するにはどうすればよいですか?

SELECT  Login.Username, 
      Messages.Subject, 
      Messages.Text, 
      Messages.Status, 
      Messages.Id, 
      Messages.Senduserid, 
      Messages.Recuserid 
FROM  Login INNER JOIN Messages 
     ON Login.Profileid = Messages.Recuserid 

あなたは二回ログインテーブルへ参加する必要があり関係

enter image description here

答えて

5

。あなたが引き抜こうとしているユーザーごとに1回。 (それらは選択肢ですが、これは一般的に最も簡単で最も一般的です)。

はそれを行うには、あなたは...ログインテーブルへの各参照に異なる別名を与える必要があり

SELECT 
    Message.*, 
    sender.Username, 
    receiver.Username 
FROM 
    Messages 
INNER JOIN 
    Login   AS sender 
    ON sender.Profileid = Messages.Senduserid 
INNER JOIN 
    Login   AS receiver 
    ON receiver.Profileid = Messages.Recuserid 
1

あなたはログインテーブルを2回

SELECT  a.Username as ReceivedUsername, 
      b.Username as SentUsername, 
      c.Subject, 
      c.Text, 
      c.Status, 
      c.Id, 
      c.Senduserid, 
      c.Recuserid 
FROM  Login a, Login b, Messages c 
     where c.Recuserid = a.Profileid and c.Senduserid = b.Profileid 
+0

@Dems実行に参加することで、これを使用することができますここでは '、'表記法を使ってまだ多くの人に叫んでいます。我々はすべて運命にある! * [さらに、それは働くこともありますか? * – MatBailie

+0

@Demsなぜそんなに深刻なのでしょうか... ONのものを修正しました。削除するのを忘れました:P –

+1

申し訳ありません、それは*であった*私は個人的に、 'JOIN'を' '、' 'に優先して使うべきだということに個人的に同意すると言っている*コメディーな方法です: – MatBailie

関連する問題