Объединение двух таблиц на основе отношений, определенных в третьей таблице
У меня есть две таблицы Activity и Action. Для активности может быть выполнено одно или несколько действий. И отношения между Activity и Action приведены в третьей таблице Action Activity.
Как получить результирующий набор, который сообщает мне, какое действие применимо для каждого вида деятельности с помощью оператора sql? Здесь структура таблицы
Таблица действий -ActivityId (PK), ActivityText
Таблица действий - ActionId (PK), ActionText
ActivityAction -ActivityActionId (PK), ActivityID, ActionID
Мне нужна результирующая таблица в формате
Действие, применимое действие
(столбец активности должен показывать ActivityText, а применимое действие - ActionText)
Не могли бы вы направить меня?
Спасибо.
Ответы
Ответ 1
Это должно сделать трюк
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
Ответ 2
SELECT ActivityText, ActionText
FROM Activity
JOIN ActivityAction ON Activity.ActivityId = ActivityAction.ActivityId
JOIN Action ON ActivityAction.ActionId = Action.ActionId
WHERE Activity.ActivityId = 1;
Ответ 3
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, вы можете присоединиться к таблице действий