2011-12-05 5 views
1

IユーザーとUser_activity、それらの構造などの2つのテーブルがありましたが、1つのテーブルの1つのカラムが他のテーブルの3つのカラムを参照する2つのテーブルを結合するにはどうすればよいですか?

ユーザーここで

id 
name 
email 
etc.. 

user_activity

id, 
initiator_id, 
source_id, 
target_id, 
activity_code, 
activity 

私はすべてのアクティビティを選択しますソース、ターゲットのすべての名前を持つユーザーのリスト(私はsource_idにそれらを参照できます)

どうすれば入手できますか?あなたは単にあなたがユーザーを参照して三回Fそれぞれの別名を使用して、3回に参加

答えて

4

...

SELECT 
    user_activity.*, 
    Initiator.Name AS InitiatorName, 
    Source.Name  AS SourceName, 
    Target.Name  AS TargetName 
FROM 
    user_activity 
INNER JOIN 
    user    AS Initiator 
    ON Initiator.ID = user_activity.initiator_id 
INNER JOIN 
    user    AS Source 
    ON Source.ID = user_activity.source_id 
INNER JOIN 
    user    AS Target 
    ON Target.ID = user_activity.target_id 
+0

ダウン有権者はなぜ、私がすることができるように手の込んだことができますあなたの懸念に対処する? – MatBailie

0
SELECT sourceUser.name, targetUser.name, initiatorUser.name FROM user_activity 
INNER JOIN User as sourceUser on sourceUser.id = user_activity.source_id 
INNER JOIN User as targetUser on targetUser.id = user_activity.target_id 
INNER JOIN User as initiatorUser on initiatorUser.id = user_activity.initiator_id 
WHERE source_id = MyUserIdQueryValue 
0
SELECT DT1.*, U.name 
    FROM (
     SELECT source_id, activity_code, activity 
      FROM user_activity 
     UNION 
     SELECT target_id AS source_id, activity_code, activity 
      FROM user_activity 
     UNION 
     SELECT inititator_id AS source_id, activity_code, activity 
      FROM user_activity 
     ) DT1 
     JOIN User U ON DT1.source_id = U.id;