Соедините две таблицы на основе отношений, определенных в третьей таблице - PullRequest
35 голосов
/ 05 января 2010

У меня есть две таблицы Активность и Действие. Для действия может быть выполнено одно или несколько действий. А отношения между Деятельностью и Действием даны в третьей таблице, называемой Деятельностью-Действием.

Как мне получить набор результатов, который говорит мне, какое действие применимо к каждому действию, используя оператор SQL? Вот структура таблицы

Таблица активности -ActivityId (PK), ActivityText

Таблица действий - ActionId (PK), ActionText

ActivityAction -ActivityActionId (PK), ActivityID, ActionID

Я хочу результирующую таблицу в формате

Активность, Применимое действие

(столбец Activity должен отображать ActivityText, а Применимое действие - ActionText)

Не могли бы вы, пожалуйста, вести меня?

Спасибо.

Ответы [ 3 ]

49 голосов
/ 05 января 2010

Это должно сработать

SELECT Activity.ActivityText as Activity, Action.ActionText as ApplicableAction
FROM ActivityAction
    INNER JOIN Activity
        ON ActivityAction.ActivityId = Activity.ActivityId
    INNER JOIN Action 
        ON ActivityAction.ActionId = Action.ActionId

Вы должны прочитать о JOINS в базах данных. Вот хорошая отправная точка:

http://en.wikipedia.org/wiki/Join_%28SQL%29

По сути, мы имеем здесь отношение «многие ко многим» между Activity и Action, которое разрешается двумя отношениями «один ко многим» с использованием таблицы соединений, называемой ActivityAction.

Чтобы вернуть необходимые данные, мы присоединяем ActivityAction к каждой из таблиц, используя соответствующие столбцы PK и FK, а затем выбираем столбцы строк в SELECT

.
3 голосов
/ 05 января 2010
SELECT ActivityText, ActionText
FROM Activity
JOIN ActivityAction ON Activity.ActivityId = ActivityAction.ActivityId
JOIN Action ON ActivityAction.ActionId = Action.ActionId
WHERE Activity.ActivityId = 1;
0 голосов
/ 05 января 2010
SELECT ActivityText AS Activity, ActionText AS ApplicableAction
  FROM Activity 
  JOIN ActivityAction on Activity.ActivityId = ActivityAction.ActivityID
  JOIN Action on Action.ActionId = ActivityAction.ActionID

У вас есть идентификаторы в таблице действий, и когда вы присоединяетесь к таблице ActivityAction по ключу ActivityId, вы можете присоединиться к таблице действий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...