Как объединить две таблицы, где один столбец в одной таблице относится к 3 столбцам в другой таблице? - PullRequest
1 голос
/ 05 декабря 2011

У меня есть две таблицы: User и User_activity, и их структура:

Пользователь

id 
name
email
etc..

user_activity

id,
initiator_id,
source_id,
target_id,
activity_code,
activity

Здесь я хочу выбрать весь список действий для пользователя (я могу отослать их к source_id) со всеми именами инициатора, источника, цели.

Как это получить?

Ответы [ 3 ]

4 голосов
/ 05 декабря 2011

Вы просто присоединяетесь три раза, используя псевдонимы для каждого из трех упоминаний пользователя ...

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 голосов
/ 05 декабря 2011
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;
0 голосов
/ 05 декабря 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...